自然语言处理N天-Day0503句向量模型 Doc2Vec

新建 Microsoft PowerPoint 演示文稿 (2).jpg

说明:本文依据《中文自然语言处理入门实战》完成。目前网上有不少转载的课程,我是从GitChat上购买。

第五课 句向量模型 Doc2Vec

Doc2Vec

Doc2Vec模型是在Word2Vec模型上提出的计算长文本向量的工具。
Doc2vec 接收一个由 LabeledSentence 对象组成的迭代器作为其构造函数的输入参数。其中,LabeledSentence 是 Gensim 内建的一个类,它接收两个 List 作为其初始化的参数:word list 和 label list。

Doc2Vec 也包括两种实现方式:DBOW(Distributed Bag of Words)和 DM (Distributed Memory)。DBOW 和 DM 的实现,二者在 gensim 库中的实现用的是同一个方法,该方法中参数 dm = 0 或者 dm=1 决定调用 DBOW 还是 DM。Doc2Vec 将文档语料通过一个固定长度的向量表达。
在这里将语料中的每一句话当作一个文本,添加对应标签。
真的是搞笑,前面文本处理又不说。

punctuation = [",", "。", ":", ";", ".", "'", '"', "’", "?", "/", "-", "+", "&", "(", ")"]  # 简易的标点集合
documents = [
    "长江是中国第一大河,干流全长6397公里(以沱沱河为源),一般称6300公里。流域总面积一百八十余万平方公里,年平均入海水量约九千六百余亿立方米。以干流长度和入海水量论,长江均居世界第三位。",
    "黄河,中国古代也称河,发源于中华人民共和国青海省巴颜喀拉山脉,流经青海、四川、甘肃、宁夏、内蒙古、陕西、山西、河南、山东9个省区,最后于山东省东营垦利县注入渤海。干流河道全长5464千米,仅次于长江,为中国第二长河。黄河还是世界第五长河。",
    "黄河,是中华民族的母亲河。作为中华文明的发祥地,维系炎黄子孙的血脉.是中华民族民族精神与民族情感的象征。",
    "黄河被称为中华文明的母亲河。公元前2000多年华夏族在黄河领域的中原地区形成、繁衍。",
    "在兰州的“黄河第一桥”内蒙古托克托县河口镇以上的黄河河段为黄河上游。",
    "黄河上游根据河道特性的不同,又可分为河源段、峡谷段和冲积平原三部分。 ",
    "黄河,是中华民族的母亲河。"
]
doc_labels = ["长江", "黄河", "黄河", "黄河", "黄河", "黄河", "黄河"]

seg_1 = [jieba.lcut(con) for con in documents]
print(seg_1)

tokenized = []
for sentence in seg_1:
    words = []
    for word in sentence:
        if word not in punctuation:
            words.append(word)
    tokenized.append(words)
print(tokenized)
count = 0
docs = []
for token in tokenized:
    print(token)
    docs.append(gensim.models.doc2vec.TaggedDocument(token, [str(count)]))
    count += 1

model = Doc2Vec(docs, dm=1, vector_size=100, window=8, min_count=5, workers=4)
model.save('./tf_logs/gensim/Doc2Vecmodel')

同样,使用load加载生成的模型。可以完成以下的功能:

  • 相关性比较,输出最相关的句子
  • 输出指定句子的向量
  • 输出相应词的向量
model=Doc2Vec.load('./tf_logs/gensim/Doc2Vecmodel')
print(model.docvecs.most_similar('2'))
print(model.docvecs.similarity('1','2'))
print(model.docvecs['3'])
print(model[u'黄河'])

[('1', 0.02226787805557251), ('3', -0.0554957389831543), ('6', -0.09592150151729584), ('4', -0.10555844008922577), ('0', -0.11392450332641602), ('5', -0.18672272562980652)]
0.022267882
[ 2.5399278e-03 -2.8060675e-03 1.1838662e-03 -4.5900163e-03
-2.2592188e-03 -6.1027469e-05 3.5589610e-04 -3.6247799e-03
-1.4267821e-03 -4.1215252e-03 -1.6795596e-03 -2.1964337e-03
-3.9358092e-03 -2.3423822e-03 1.8849296e-03 1.5014587e-03
1.0157779e-03 -1.1299652e-03 -2.9043981e-03 -1.1770092e-03
-4.7971304e-03 4.4502863e-03 1.8269408e-03 3.7658960e-03
-2.1040295e-03 -1.9338611e-03 -1.6619615e-03 -4.2310213e-03
2.5134308e-03 -2.9664526e-03 -4.9581556e-03 -2.8834443e-03
-1.3457801e-03 3.2115707e-03 -9.7372598e-05 3.2209276e-04
-2.7755385e-03 -2.5908961e-03 2.4044469e-03 4.8442096e-03
2.7878017e-03 -3.9010064e-03 2.9414597e-03 3.3275539e-03
-2.2414756e-04 -4.8539904e-03 1.5691571e-03 -2.0677031e-03
1.5962855e-03 3.3503543e-03 1.1771108e-03 -3.6246055e-03
4.9542575e-03 -1.2953846e-04 4.3222341e-03 -8.8993600e-04
-8.6242473e-04 2.1286942e-03 2.6334047e-03 -1.3650248e-03
-2.3317258e-03 4.8695388e-03 -6.3901563e-04 -2.9533883e-03
3.2749702e-03 -2.8107364e-03 4.0113344e-05 1.4537509e-03
-3.6369502e-03 4.8945234e-03 4.1050343e-03 -7.3735544e-04
6.0775498e-04 1.6278679e-03 -4.9947142e-03 4.3103728e-03
-1.9507188e-03 3.1360141e-03 3.3042983e-03 1.1557952e-03
-9.9916104e-04 -1.9437161e-03 -1.6853254e-03 8.6022308e-04
1.9310891e-03 1.4317114e-03 -1.3005625e-03 -2.3332520e-03
1.9896606e-03 -1.5515413e-03 -4.1380972e-03 3.6431318e-03
2.1386365e-03 -1.0886093e-03 2.0737909e-03 -4.9078218e-03
-3.1870804e-03 -3.4141245e-03 -4.2982423e-03 -1.8706605e-03]

你可能感兴趣的:(自然语言处理N天-Day0503句向量模型 Doc2Vec)