如何解决创建gensim字典时添加进度条详细
我想从数据帧的行创建一个 gensim dictionary。 df.preprocessed_text
是一个单词列表。
from gensim.models.phrases import Phrases,Phraser
from gensim.corpora.dictionary import Dictionary
def create_dict(df,bigram=True,min_occ_token=3):
token_ = df.preprocessed_text.values
if not bigram:
return Dictionary(token_)
bigram = Phrases(token_,min_count=3,threshold=1,delimiter=b' ')
bigram_phraser = Phraser(bigram)
bigram_token = []
for sent in token_:
bigram_token.append(bigram_phraser[sent])
dictionary = Dictionary(bigram_token)
dictionary.filter_extremes(no_above=0.8,no_below=min_occ_token)
dictionary.compactify()
return dictionary
我找不到它的进度条选项,callbacks 似乎也不适用于它。由于我的语料库很大,我非常感谢一种展示进度的方式。有吗?
解决方法
我建议再次更改 prune_at
以进行监控,因为它会改变记住二元组/单词的行为,可能会丢弃比限制内存使用量严格要求的更多内容。
将 tqdm
包裹在使用的可迭代对象(包括 token_
构造函数中的 Phrases
使用和 bigram_token
构造函数中的 Dictionary
使用)应该可以工作。
或者,启用 INFO
或更高级别的日志记录应该显示日志记录,虽然不像进度条那样漂亮/准确,但会提供一些进度指示。
另外,如果如代码所示,使用bigram_token
只是为了支持下一个Dictionary
,不需要创建为完整的内存list
。您应该能够仅使用分层迭代器来转换文本,并逐项计算 Dictionary
。 EG:
# ...
dictionary = Dictionary(tqdm(bigram_phraser[token_]))
# ...
(另外,如果您只使用 Phraser
一次,您可能根本无法从创建它中获得任何好处 - 当您想继续应用相同的短语创建时,这是一个可选的内存优化没有原始 Phrases
调查对象的全部开销的操作。但是如果 Phrases
仍在范围内,并且在此步骤后将立即丢弃所有内容,则可能 直接使用 Phrases
对象同样快,无需绕道创建 Phraser
- 所以试试看。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。