Open QI-charles opened 4 years ago
分别回答两个问题:
算法基本是固定的,没有太多优化空间。可能的话,建议从数据层面优化速度,比如把这些语料按照行业/公司/岗位先分类,然后分别执行新词发现。因为算法的时间复杂度大约是平方级别的,分而治之可以提升效率,还可能为不同的维度提供不同的发现。
目前没有默认进行排序,不过这里为发现的新词提供了多个指标,可以按照需要选择合适的指标排序。
对于new_words_info = ht.word_discover(para)
得到的new_words_info,它是一个这样的dataframe:
freq left_ent right_ent agg score
text
父亲 0.008442 1.033562 2.397895 118.454545 0.060068
看见 0.005372 1.747868 1.549826 69.098485 0.032588
我的 0.003837 1.332179 1.609438 4.431973 0.007299
了一 0.003070 1.039721 1.039721 14.849003 0.007480
他们 0.003070 1.039721 1.039721 21.186992 0.008465
桔子 0.003070 1.039721 1.386294 100.230769 0.014902
自己 0.003070 1.386294 1.386294 162.875000 0.018826
茶房 0.003070 1.386294 1.386294 325.750000 0.021388
不能 0.002302 1.098612 1.098612 34.901786 0.007805
北京 0.002302 1.098612 1.098612 156.360000 0.011100
走到 0.002302 1.098612 1.098612 29.613636 0.007444
送我 0.002302 1.098612 1.098612 26.591837 0.007208
其中第一列是词频,二三列是词语与上下文区别度的左右交叉熵,第四列是词语内部的聚合度,而第五列是上面几项指标的一个综合评分。
如要按照词频排序,则可以用new_words_info = new_words_info.sort_values(by='freq', ascending=False)
,再得到具体词语就是new_words = new_words_info.index.tolist()
不过,也许设置一个默认的排序标准确实会更易于使用,我会考虑在后面更新一个默认排序标准上去。
我看了一下,跑起来是单进程的,可以考虑多进程+共享内存或者用C++多线程重写一下?
配置 8G内存,跑5W条预料(简历招聘文本),用了大概2小时。 还有请问新词发现列出的新词是按指标排序好的么?是什么指标排序的?词频或者聚合度还是其他指标?