text2vec
text2vec, chinese text to vetor.(文本向量化表示工具,包括词向量化、句子向量化)
Feature
文本向量表示
字词粒度,通过腾讯AI Lab开源的大规模高质量中文词向量数据(800万中文词),获取字词的word2vec向量表示。
句子粒度,通过求句子中所有单词词嵌入的平均值计算得到。
篇章粒度,可以通过gensim库的doc2vec得到,应用较少,本项目不实现。
文本相似度计算
基准方法,估计两句子间语义相似度最简单的方法就是求句子中所有单词词嵌入的平均值,然后计算两句子词嵌入之间的余弦相似性。
词移距离(Word Mover’s Distance),词移距离使用两文本间的词嵌入,测量其中一文本中的单词在语义空间中移动到另一文本单词所需要的最短距离。
query和docs的相似度比较
rank_bm25方法,使用bm25的变种算法,对query和文档之间的相似度打分,得到docs的rank排序。
Result
文本相似度计算
基准方法
尽管文本相似度计算的基准方法很简洁,但用平均词嵌入之间求余弦相似度的表现非常好。实验有以下结论:
1. 简单word2vec嵌入比GloVe嵌入表现的好
2. 在用word2vec时,尚不清楚使用停用词表或TF-IDF加权是否更有帮助。在STS数据集上,有一点儿帮助;在SICK上没有帮助。
仅计算未加权的所有word2vec嵌入平均值表现得很好。
3. 在使用GloVe时,停用词列表对于达到好的效果非常重要。利用TF-IDF加权没有帮助。
词移距离
基于我们的结果,好像没有什么使用词移距离的必要了,因为上述方法表现得已经很好了。只有在STS-TEST数据集上,而且只有在有停止词列表的情况下,词移距离才能和简单基准方法一较高下。
Install
pip3 install text2vec
or
git clone https://github.com/shibing624/text2vec.git
cd text2vec
python3 setup.py install
Usage:
get text vector
import text2vec
char = '我'
result = text2vec.encode(char)
print(type(result))
print(char, result)
word = '如何'
print(word, text2vec.encode(word))
a = '如何更换花呗绑定银行卡'
emb = text2vec.encode(a)
print(a, emb)
output:
我 [ 0.09639428 -0.14142498 0.02505628 0.0041334 0.0891804 -0.06853037
0.02480385 -0.00202681 0.04466304 0.05935134 0.06626346 0.02792982
-0.00122364 -0.03564163 0.07814336 -0.01186718 -0.11831381 -0.11164719
-0.02129865 -0.07289924 0.04736083 0.03148666 0.0069021 0.06107369
0.05683238 0.03053819 -0.08670152 0.05620533 0.07051748 -0.05775733
-0.06013909 0.01728704 -0.09136213 0.06711558 -0.04173594 -0.02561434
0.05425368 0.03572141 -0.04812391