自然语言处理到机器学习
Posted
技术标签:
【中文标题】自然语言处理到机器学习【英文标题】:Natural Language Processing to Machine Learning 【发布时间】:2015-08-13 08:07:21 【问题描述】:我是自然语言处理方面的新手,但我研究了很多机器学习技术,尤其是在 Matlab 中。我最大的问题是,当我(在 Matlab 中)处理文本时,我们在使用 ML 算法时遇到了三个问题:
-
单词的数据空间不是数字的,因此我不能直接使用算法。我需要一些转变吗?我读过关于内核字符串、词嵌入的信息,但我不知道他们如何解决这个问题。
每个词的特征数量是可变的,我的意思是,当我们获得向量时,我们可以有下一个和前一个词 + 实际词的 POS 标记,但并非所有词都有。我们可以将此特征设置为 0 以在矩阵中计算吗?一般来说,我在解决向量中的语法解析等依赖项时遇到问题。
文本中的标签由序列(句子级别)分隔。我们如何在向量中知道句子之间的分隔?
【问题讨论】:
你在说什么算法?并非所有 ML 算法都需要数值特征。 “文本中的标签”是什么意思?你是说分句吗? CRF、SVM、神经网络等算法......监督学习的标签,例如在名称实体识别中 你可以很好地训练具有符号特征的分类器,如 SVM 或 NN——它们是二值化的,词汇表中的每个单词要么存在,要么不存在于训练实例中。 – 你的最后一点对我来说仍然没有任何意义。训练数据中的标注标签不在文本中,而是在标注层中。 你能解释一下二值化是什么意思吗?我的最后一个问题是关于标签向量的,例如在 NER 中你有各种句子,每个单词都由一个类注释,但在这个向量中你不知道句子何时结束。 我真的不懂matlab,可能做NLP/文本处理不是很简单。但是,在 NLP 社区中大量使用 SVM、NN、CRF 和更多算法,因此您可能只需要切换工具/编程语言。你真的应该发布一些你尝试过的代码以及你遇到的问题,以便有人给你有用的建议。 【参考方案1】:您可以通过多种方式将文本转换为数值。 我已经提到了使用“词袋”假设的两种常用方法
词袋的工作方式如下:
假设您有三个看起来像这样的文档:
文档 1:猫跳过了懒惰的狐狸 Doc 2:机器学习是人工智能的一个子领域 Doc 3:那是喂猫机
在这种情况下,您在数据语料库中的词汇量(唯一单词数)为 16,您可以将单词的索引存储在字典 (python) 或 hashmap (java/c++) 中:
1:
2:猫
3 : 跳跃
...
在这种情况下,您可以将文档 1(以最简单的密集方式)表示为 V 长度的向量,并存储每个单词出现的次数。
文档 1:[2, 1, 1, 1, 1, 1, 0, 0, 0, ...]
您可以做的另一件事是弄清楚每个单词对每个文档的重要性,为此您可以在 Wikipedia 上阅读有关 TF-IDF 的更多信息。
【讨论】:
谢谢,但是在 NER 中呢?我需要 POS 标记或词条以及单词的前一个/下一个等功能,我如何表示这些功能(问题 2)? 我认为有几篇研究论文解释了如何做到这一点:尝试阅读:Wallach, H. 主题建模:超越词袋。第 23 届机器学习国际会议论文集(2006 年)。以上是关于自然语言处理到机器学习的主要内容,如果未能解决你的问题,请参考以下文章
聊天机器人(chatbot)终极指南:自然语言处理(NLP)和深度机器学习(Deep Machine Learning)