自然语言处理词向量化总结

标签: 数据挖掘 | 发表时间:2017-04-04 23:52 | 作者:bicloud
出处:http://blog.sina.com.cn/bicloud

自然语言处理

1. 词向量表示

distributional representation vs. distributed representation 分布式表达(一类表示方法,基于统计含义),分散式表达(从一个高维空间X映射到一个低维空间Y) 分布假说(distributional hypothesis)为这一设想提供了 理论基础:上下文相似的词,其语义也相似.

自然语言处理的基础是词向量化,即文本数值化,后面进行数据挖掘工作就和常见的任务类似,即分类,聚类等等。

1.1 one-hot encoding

In vector space terms, this is a vector with one 1 and a lot of zeroes

[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]

1.2 count-based

tf*idf

svd 

Glove

1.3 word embedding

基于神经网络的词向量表示 word2vec(2*2=4)四种训练方法

网络结构 CBOW,skip-gram

训练方法 Hierarchical Softmax,negative sampling

2. 词向量实现工具

word2vec

https://code.google.com/archive/p/word2vec/

gensim

https://github.com/RaRe-Technologies/gensim

fasttext

https://github.com/facebookresearch/fastText


   from gensim.models import KeyedVectors

model = KeyedVectors.load_word2vec_format("wiki.en.vec")
words = []
for word in model.vocab:
    words.append(word)

print("word count: {}".format(len(words)))

print("Dimensions of word: {}".format(len(model[words[0]])))

demo_word = "car"

for similar_word in model.similar_by_word(demo_word):
    print("Word: {0}, Similarity: {1:.2f}".format(
        similar_word[0], similar_word[1]
    ))

   word count: 2519370
Dimensions of word: 300
Word: cars, Similarity: 0.83
Word: automobile, Similarity: 0.72
Word: truck, Similarity: 0.71
Word: motorcar, Similarity: 0.70
Word: vehicle, Similarity: 0.70
Word: driver, Similarity: 0.69
Word: drivecar, Similarity: 0.69
Word: minivan, Similarity: 0.67
Word: roadster, Similarity: 0.67
Word: racecars, Similarity: 0.67

Glove

https://github.com/stanfordnlp/GloVe


   
import os

import numpy as np
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
from tsne import bh_sne

def read_glove(glove_file):
    embeddings_index = {}
    embeddings_vector = []
    f = open("glove.6B.100d.txt", "rb")
    word_idx = 0
    for line in f:
        values = line.decode("utf-8").split()
        word = values[0]
        vector = np.asarray(values[1:], dtype="float64")
        embeddings_index[word] = word_idx
        embeddings_vector.append(vector)
        word_idx += 1
    f.close()
    inv_index = {v : k for k, v in embeddings_index.items()}
    glove_embeddings = np.vstack(embeddings_vector)
    glove_norms = np.linalg.norm(glove_embeddings, axis=-1, keepdims=True)
    glove_embeddings_normed = glove_embeddings / glove_norms
    # glove_embeddings_normed.fill(0)

    return embeddings_index, glove_embeddings, glove_embeddings_normed, inv_index

def get_emb(word, embeddings_index, glove_embeddings):
    idx = embeddings_index.get(word)
    if idx is None:
        return None
    else:
        return glove_embeddings[idx]

def get_normed_emb(word, embeddings_index, glove_embeddings_normed):
    idx = embeddings_index.get(word)
    if idx is None:
        return None
    else:
        return glove_embeddings_normed[idx]


def most_similar(words, inv_index, embeddings_index, glove_embeddings, glove_embeddings_normed, topn=10):
    query_emb = 0

    if type(words) == list:
        for word in words:
            query_emb += get_emb(word, embeddings_index, glove_embeddings)
    else:
        query_emb = get_emb(words, embeddings_index, glove_embeddings)

    query_emb = query_emb / np.linalg.norm(query_emb)

    cosin = np.dot(glove_embeddings_normed, query_emb)

    idxs = np.argsort(cosin)[::-1][:topn]

    return [(inv_index[idx], cosin[idx]) for idx in idxs]


def plot_tsne(glove_embeddings_normed, inv_index, perplexity, img_file_name, word_cnt=100):
    #word_emb_tsne = TSNE(perplexity=30).fit_transform(glove_embeddings_normed[:word_cnt])
    word_emb_tsne = bh_sne(glove_embeddings_normed[:word_cnt], perplexity=perplexity)
    plt.figure(figsize=(40, 40))
    axis = plt.gca()
    np.set_printoptions(suppress=True)
    plt.scatter(word_emb_tsne[:, 0], word_emb_tsne[:, 1], marker=".", s=1)
    for idx in range(word_cnt):
        plt.annotate(inv_index[idx],
                     xy=(word_emb_tsne[idx, 0], word_emb_tsne[idx, 1]),
                     xytext=(0, 0), textcoords='offset points')
    plt.savefig(img_file_name)
    plt.show()

def main():
    glove_input_file = "glove.6B.100d.txt"
    embeddings_index, glove_embeddings, glove_embeddings_normed, inv_index = read_glove(glove_input_file)
    print(np.isfinite(glove_embeddings_normed).all())
    print(glove_embeddings.shape)
    print(get_emb("computer", embeddings_index, glove_embeddings))
    print(most_similar("cpu", inv_index, embeddings_index, glove_embeddings, glove_embeddings_normed))
    print(most_similar(["river", "chinese"], inv_index, embeddings_index, glove_embeddings, glove_embeddings_normed))
    # plot tsne viz
    plot_tsne(glove_embeddings_normed, inv_index, 30.0, "tsne.png", word_cnt=1000)

if __name__ == "__main__":
    main()



3. papers

  1. Neural Word Embeddings as Implicit Matrix Factorization
  2. Linguistic Regularities in Sparse and Explicit Word Representation
  3. Random Walks on Context Spaces Towards an Explanation of the Mysteries of Semantic Word Embeddings
  4. word2vec Explained Deriving Mikolov et al.’s Negative Sampling Word Embedding Method
  5. Linking GloVe with word2vec
  6. Word Embedding Revisited: A New Representation Learning and Explicit Matrix Factorization Perspective
  7. Hierarchical Probabilistic Neural Network Language Model
  8. Notes on Noise Contrastive Estimation and Negative Sampling
  9. Noise-contrastive estimation: A new estimation principle for unnormalized statistical models
  10. Distributed Representations of Words and Phrases and their Compositionality
  11. Efficient Estimation of Word Representations in Vector Space
  12. GloVe Global Vectors forWord Representation
  13. Neural probabilistic language models
  14. Natural language processing (almost) from scratch
  15. Learning word embeddings efficiently with noise contrastive estimation
  16. A scalable hierarchical distributed language model
  17. Three new graphical models for statistical language modelling
  18. Improving word representations via global context and multiple word prototypes
  19. A Primer on Neural Network Models for Natural Language Processing
  20. Joulin, Armand, et al. "Bag of tricks for efficient text classification." FAIR 2016
  21. P. Bojanowski , E. Grave, A. Joulin, T. Mikolov, Enriching Word Vectors with Subword Information

https://github.com/oxford-cs-deepnlp-2017/lectures

wget http://nlp.stanford.edu/data/glove.6B.zip

wget https://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.zh.zip

wget https://s3-us-west-1.amazonaws.com/fasttext-vectors/wiki.en.zip

https://blog.manash.me/how-to-use-pre-trained-word-vectors-from-facebooks-fasttext-a71e6d55f27

4. 自然语言处理应用

自然语言处理的基础是文本词向量化,之后可以进行分类,聚类,情感分析等等。

Natural Language Processing

Topic Classification

Topic modeling

Sentiment Analysis

Google Translate

Chatbots / dialogue systems

Natural language query understanding (Google Now, Apple Siri, Amazon Alexa)

Summarization


 

相关 [自然语言 向量] 推荐:

自然语言处理词向量化总结

- - 冰火岛
distributed representation 分布式表达(一类表示方法,基于统计含义),分散式表达(从一个高维空间X映射到一个低维空间Y) 分布假说(distributional hypothesis)为这一设想提供了 理论基础:上下文相似的词,其语义也相似.. 自然语言处理的基础是词向量化,即文本数值化,后面进行数据挖掘工作就和常见的任务类似,即分类,聚类等等.

自然语言处理概览

- - 互联网 - ITeye博客
自然语言处理研究的是词、句、文档等几个层次的内容. 一、发展历史(前两个是理论、后一个是经验). 1、形式语法(复杂特征集). 2、词汇主义方法(WordNet、ConceptNet、FrameNet), 人工总结和整理概念、层次、结构等 . 3、统计语言模型(语言有统计规律性,让机器去自己学习规律).

自然语言处理某个pipeline

- - 互联网 - ITeye博客
1、数据源:包括文本、pdf、数据库等不同来源. 2、使用到的库:jieba gensim sklearn keras . 3、可以实现的服务:找出相关和相近词(以分词为准)、比较2个分词的相似度、和哪些相关同时和别的不相关(语义上的模糊查找). 数据源的load->gensim->classifier(传统基于词频的/深度学习的 keras).

统计自然语言处理的基础学习之一

- - CSDN博客互联网推荐文章
理性主义:其实就是纯粹使用规则的方法处理自然语言,并认为这些语言规则天生就存在人的基因中. 在计算机中重现这些规则,就能学会人的语言处理能力. 经验主义:认为人有感知和学习能力,通过概括、模式识别、联想等能力,来学习到自然语言的结构. 哲学上的问题,类似于起源之类,就先别考虑的. 统计方法在NLP中的地位是什么.

[微信机器人_04]自然语言处理简单实现

- - CSDN博客互联网推荐文章
这篇博文中将介绍奇迹蛋自然语言处理模块的实现,自然语言处理的三个关键词:分词、建库、匹配. 机器人要如何来记忆这两组对话呢?. 这样存储当然没有问题,但是显然太土了,有没有其它的办法呢. 在存储过程中,总是希望能够去除冗余,即相同的词语能够只存储一次. 很容易想到,把句子拆分成词来存储. 如图所示,每个问题都拆分成词,并以词为节点建立树.

Quora在自然语言处理上的所做的工作

- - 标点符
问答网站最核心的内容是提供给优质的内容,如何让内容更加优质,处理分析大量的文本数据也是必不可少的工作. Quora有大量的文本数据,分布在Quora的数百万个问题、答案和评论中. 不仅如此,还有大量的元数据来补充我问答,包括”赞”和”踩”,用户对话题的兴趣或擅长与否,问题和话题的关系,话题去重合并,用户的社交和关系和影响力幅射,以及用户在Quora的每一个操作历史.

自然语言处理之词性标注集

- - 标点符
词性标注(Part-of-Speech tagging 或POS tagging),又称词类标注或者简称标注,是指为 分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程. 实词:名词、动词、形容词、状态词、区别词、数词、量词、代词. 虚词:副词、介词、连词、助词、拟声词、叹词.

自然语言处理第一番之文本分类器

- - 小石头的码疯窝
文本分类应该是自然语言处理中最普遍的一个应用,例如文章自动分类、邮件自动分类、垃圾邮件识别、用户情感分类等等,在生活中有很多例子,这篇文章主要从传统和深度学习两块来解释下我们如何做一个文本分类器. 传统的文本方法的主要流程是人工设计一些特征,从原始文档中提取特征,然后指定分类器如LR、SVM,训练模型对文章进行分类,比较经典的特征提取方法如频次法、tf-idf、互信息方法、N-Gram.

从NLP到“自然语言理解”,Facebook如何让Messenger更懂人类?

- - 雷锋网
雷锋网按:Facebook的AML和FAIR团队合作进行自然语言处理对自然语言理解进行着合作研究. 在2017年4月19日举办的F8开发者大会上,Facebook向公众介绍了他们的研究进展、自然语言理解在Facebook产品中的应用,并且介绍了平民化的自然语言理解平台CLUE,希望依靠大家的力量,继续丰富自然语言理解的应用.

周明:未来5-10年,自然语言处理将走向成熟

- - 微软亚洲研究院
近日,微软亚洲研究院副院长周明在「自然语言处理前沿技术分享会」上,与大家讲解了自然语言处理(NLP)的最新进展,以及未来的研究方向,以下内容由CSDN记者根据周明博士的演讲内容编写,略有删减. 周明博士于1999年加入微软亚洲研究院,不久开始负责自然语言研究组. 近年来,周明博士领导研究团队与微软产品组合作开发了微软小冰(中国)、Rinna(日本)、Zo(美国)等聊天机器人系统.