如何预处理文本以进行嵌入?
Posted
技术标签:
【中文标题】如何预处理文本以进行嵌入?【英文标题】:How to preprocess text for embedding? 【发布时间】:2017-11-01 16:09:38 【问题描述】:在将单词作为向量的传统“one-hot”表示中,向量的维度与词汇的基数相同。为了降低维度,通常会删除停用词,并应用词干提取、词形还原等方法来规范您想要执行某些 NLP 任务的特征。
我无法理解是否/如何预处理要嵌入的文本(例如 word2vec)。我的目标是使用这些词嵌入作为 NN 的特征,将文本分类为主题 A,而不是主题 A,然后在主题 A 的文档上对它们执行事件提取(使用第二个 NN)。
我的第一直觉是预处理去除停用词、词形还原等。但是当我对 NN 有了更多了解后,我意识到应用于自然语言时,CBOW 和 skip-gram 模型实际上需要整个词集存在——为了能够从上下文中预测一个词,你需要知道实际的上下文,而不是规范化后上下文的简化形式......对吗?)。 POS 标签的实际序列似乎是人类感觉单词预测的关键。
我找到了some guidance online,但我仍然很想知道这里的社区是怎么想的:
-
在标点、词干、词形还原、停用词、数字、小写等方面是否有最近普遍接受的最佳做法?
如果是这样,它们是什么?一般来说,处理越少越好,还是在较重的一侧处理更多以规范化文本?是否有取舍?
我的想法:
最好删除标点符号(例如在西班牙语中不要删除重音符号,因为它传达上下文信息),将书面数字更改为数字,不要小写所有内容(用于实体提取),不要词干,不要词形还原.
这听起来对吗?
【问题讨论】:
【参考方案1】:我自己已经解决这个问题有一段时间了。我完全同意其他答案,这实际上取决于您的问题,您必须将输入与您期望的输出相匹配。 我发现对于情绪分析等某些任务,可以通过预处理来消除很多细微差别,但是例如对于文本生成,保留所有内容非常重要。
我目前正在生成拉丁文本,因此我需要在数据中保留相当多的结构。
我发现一篇非常有趣的论文对该主题进行了一些分析,但它只涵盖了一小部分。但是,它可能会给您更多提示:
关于文本预处理在神经网络架构中的作用:文本分类和情感分析的评估研究 Jose Camacho-Collados 和 Mohammad Taher Pilehvar
https://arxiv.org/pdf/1707.01780.pdf
这是他们结论的引述:
“我们的评估强调了在训练和评估数据中采用的预处理策略保持一致的重要性。一般而言,简单的标记化语料库与更复杂的预处理技术(如词形还原或多词分组)相同或更好,除了对应的数据集到一个专门的领域,比如健康,其中单一的标记化表现不佳。此外,在多词分组的语料库上训练的词嵌入在应用于简单的标记化数据集时表现出奇的好。”
【讨论】:
我简要回顾了 Collados 的论文,非常好。您是否知道任何文本简化,即 python 或 R 中的句子简化库使用这个或类似的东西?【参考方案2】:很多问题。所有这些的答案可能是“取决于”。需要考虑您尝试预测的类和您拥有的文档类型。尝试预测作者身份(那么你肯定需要保留各种标点符号和大小写,这样文体法才会起作用)与情感分析(你可以摆脱几乎所有东西,但必须特别注意否定之类的东西)是不一样的.
【讨论】:
【参考方案3】:我会说对两端应用相同的预处理。表面形式是您的链接,因此您无法以不同的方式进行规范化。我确实同意 Joseph Valls 提出的观点,但我的印象是大多数嵌入都是以通用方式而不是特定方式进行训练的。我的意思是,谷歌新闻嵌入在各种不同的任务上表现得相当好,而且我不认为它们有一些花哨的预处理。获得足够的数据往往更为重要。说了这么多——这仍然取决于:-)
【讨论】:
以上是关于如何预处理文本以进行嵌入?的主要内容,如果未能解决你的问题,请参考以下文章
如何配置嵌入式 Jetty 以处理 OPTIONS 预检请求?
Elasticsearch:如何部署 NLP:文本嵌入和向量搜索