如何确定一段文本是否提到了一个产品

4
我是自然语言处理的新手,如果我的问题不清楚,我很抱歉。我已经读了一本或两本关于这个主题的书,并做了各种图书馆的普通研究,以找出我应该如何做到这一点,但我还不确定我知道该怎么做。
我正在尝试一个应用程序的想法,其中的一部分是尝试在实时的非结构化文本(例如推文、Facebook帖子、电子邮件、网站等)中查找产品提及。可以假定它们是已知的(存储在文件或数据库中)。以下是一些例子:
- “从明天开始,我们有5盒@hersheys snickers可用,每盒售价5美元 - 每人限购1盒”(snickers是来自hershey公司的产品[作为“@hersheys”提到]) - “重大消息:12盎司的可口可乐和百事可乐从星期五开始打折。”(可口可乐是来自可口可乐公司的产品[别名为“coke”],百事可乐是来自百事公司的产品) - “#OMG,我刚买了我的梦想车。野马!!!”(野马是福特的产品)
因此,基本上,给定一段文本,查询文本以查看是否提到了产品,并接收一些指示(布尔值或置信度数字),表明它确实提到了该产品。
我有一些顾虑:
- 因为拼写错误而丢失产品。我想也许可以使用字符串相似性检查来捕获这些。 - 产品名称也是英语单词或事物,会被捕捉到。例如野马和马车之间的区别。 - 需要保留产品的替代名称列表(例如,“可乐”代表“可口可乐”等)。
我真的不知道从哪里开始,但任何帮助都将不胜感激。我已经看过NLTK和SciKit,但没有从中学到如何做到这一点。如果您知道解释这个问题的示例或论文,请提供链接。目前我还没有具体的语言偏好,最好是Java,但Python和Scala也可以接受。

昨天刚回答了一个类似的问题。重点在于技术,而不是工具。请查看是否有帮助,否则我会写详细的答案。 - Aditya
@AdityaJoshi,谢谢。我会研究一下这个。在此期间,我发现了一个叫做词法层次匹配的东西(http://cogcomp.cs.illinois.edu/page/demo_view/LLM),它基本上满足了我的最低要求。我需要花一些时间来评估它,以及你的建议,并提供反馈,因为这对我来说是一个全新的领域。 - loesak
2个回答

3
您选择的答案并没有真正回答您的问题。最好的方法是使用命名实体识别器(NER)和POS标记器(获取NNP / NNPS;专有名词)。数据库中可能缺少一些新品牌,例如Lyft(Uber的竞争对手),但如果不开发自己的道具数据库,则Stanford标记器将解决您立即需要解决的一半需求。
如果您有时间,建议构建包含所有品牌名称的词典,并简单地从推文字符串中提取它。如果您知道如何爬网站,那这不是一个难题。 http://www.namedevelopment.com/brand-names.html

1
你的目标似乎是将给定文本中的语言形式分类为语义实体的引用(可以由许多不同的语言形式引用)。您描述了一些子任务,以便获得良好的结果,但它们仍然是独立的任务。

拼写错误

为了处理单词的潜在拼写错误,您需要将这些可能的拼写错误与它们的规范形式(即正确的形式)相关联。
  • 音相似性:很多“拼写错误”的原因在于单词的语音形式(即发音)和其正字形式(即拼写)之间的关系不透明。因此,解决这个问题的好方法是按照音标编制索引术语,使得例如innovashuninnovation相关联。
  • 形式相似性:此外,您可以进行字符串相似性检查,但可能会引入许多噪声到您的结果中,因为许多不同的单词实际上非常相似(例如chicchick)。您可以通过先对单词进行形态分析,然后使用树核函数来使其更加智能化。
  • 手工映射:您还可以简单地制作一个常见的misspelling → canonical_form映射列表。这对于以上方法未处理的“异常”情况非常有效。

词义消歧

野马汽车和野马是同一种形式,但指代完全不同的实体(或者说类别,如果你想要严谨一些的话)。事实上,我们人类自己也无法确定具体指的是哪一个,除非我们还知道这个单词上下文。一种广泛使用的建模上下文的方法是分布式词汇语义学:将一个词与另一个词的语义相似性定义为它们在文本中前后出现的单词的相似性。

语言别名(同义词)

如上所述,任何给定的语义实体都可以用多种不同的方式来引用:浴室、洗手间、厕所、马桶、水洗间、卫生间、小便所、男/女洗手间、王座室等等。对于像这样涉及通用实体的简单含义,它们通常可以被视为变体拼写方式,就像"常见拼写错误"一样,并且可以通过列表映射到"规范"形式。对于模棱两可的引用,例如"王座室",还可以包括其他指标(例如词汇分布方法),以便消除歧义,使您不会将"我现在在王座室!"这句话与"白金汉宫的王座室很漂亮"联系起来。

结论

要达到您想要的目标,您需要做很多工作,但这些都是有趣的事情,并且已经有很好的库可用于完成大部分这些任务。


非常感谢您的回答,非常全面。不幸的是,我一时无法验证您是否正确。希望能尽早处理。非常感谢。 - loesak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接