使用预先训练的 LSTM 识别自然语言英语文本中的风味描述符的 Python 代码。https://doi.org/10.3390/foods10071633
项目描述
感官描述符标识符
该工具由弗吉尼亚理工大学的研究员 Chreston Miller 创建,用于识别英语食品评论和其他文本中具有风味描述意义的单词。它基于 Intuition Engineering 在“Deep learning for specific information extract from unstructured texts”一文中描述的架构。威士忌评论的结果已发表在“通过使用深度学习对威士忌词典进行感官描述符分析”。Leah Hamilton 已对简化和标准化预处理进行了重大更改,他是该存储库的另一位作者和当前维护者。如果您希望代码以相同的方式重现 Foods 论文的结果,请向Chreston Miller 发送电子邮件。
该软件包使用深度学习后端 keras 在 Python 中编程,包括来自Whiskycast、WhiskyAdvocate、The Whisky Jug和Breaking Bourbon的一组威士忌评论,其中包含手动注释的风味描述性和风味非描述性形容词和名词示例,一个训练有素的神经网络网络来预测上下文中标记的描述性或非描述性状态,以及使用经过训练的网络将示例数据集中的所有标记标记为描述性或非描述性的代码。
安装和依赖
当您使用 下载此包时pip
,它应该会自动下载依赖项:
keras>=2.3
numpy
pandas
tensorflow>2
如果您想启用 GPU 加速(推荐用于(重新)训练),我们鼓励您在安装此软件包之前tensorflow
下载您喜欢的(via pip
) 和CUDA(通过 NVIDIA 网站)版本。
pip install flavorfetcher
如果您从源下载此包(例如,通过 GitHub 获得),您必须替换flavorfetcher
为指向该目录的指针,该目录README.md
将特定于您。作为一个可能的例子:
pip install C:/Users/YOURNAME/Documents/flavor-fetcher
通过 安装此包pip
后,您将能够通过导入相关函数在任何 Python 解释器或 IDE 中运行以下代码示例。
此外,要运行此代码,您需要从斯坦福 NLP 网站 ( )手动下载 300 维GloVe 嵌入。glove.42B.300d.txt
如果您是编程新手,我们建议将此大文件保存到与数据文件相同的位置,以便您知道在哪里可以找到它。
用法
此代码旨在复制“通过使用深度学习对威士忌词典进行感官描述符分析”的结果,或允许用户使用预训练模型在自己的数据集中识别风味描述符。
数据格式化
该神经网络使用已被 R 包 cleanNLP(SpaCy 的“整洁”实现)标记化的文本进行训练,特别是使用语言模型en_core_web_sm
。如果您的数据采用 cleanNLP 的 SpaCy 实现创建的格式,则它应该已经正确格式化,即带有列:
token
- 作为字符串的标记,小写并删除了空格,但在文本中显示的其他内容。upos
- 词性,基于通用词性库doc_id
- 与令牌所在的文档相对应的唯一编号。sid
- 表示令牌在其文档中的哪个句子的数字。tid
- 一个数字,指示标记在其句子中的位置。
您可以使用任何英语标记器和词性标记器来准备您的数据(尽管结果可能会因标记化差异而异),只要您随后将数据格式化为.csv
包含这些列的文件即可。如果您的数据有这些列但没有这些确切的名称,您可以为该工具提供一个特殊的列规范,如下所示。
Python中的预测
file_to_file_workflow()
您可以通过导入包并从模块中调用函数来在 Python 中进行预测flavor-fetcher.makepredictions
。最简单的示例(使用提供的示例数据、模型等)是:
from flavorfetcher.makepredictions import file_to_file_workflow as do_predict
do_predict(glove_file = "glove.42B.300d.txt")
由于它的大小,此包中不包含 GloVe 嵌入文件,您必须始终指定其位置。所有其他文件都是可选的。
默认情况下,此包将从包中包含的模型、设置和数据文件中提取,并将输出保存为tokenwise_lstm_predictions_YYYYMMDD-HHMMSS.csv
当前工作目录。如果您不确定它在哪里,您始终可以自己指定输出位置。对于大多数用例,您可能还必须指定自己的数据。所以更常见的用法可能如下所示:
from flavorfetcher.makepredictions import file_to_file_workflow as do_predict
do_predict(reviews_file = "example_data.csv", glove_file = "glove.42B.300d.txt", output_file = "predicted_descriptors.csv")
在实践中,您可能需要更改上述文件名以反映您的特定用例并表示文件在文件系统中的位置,除非它们都在当前工作目录中。
默认情况下,该脚本会查找上面提到的确切列名。所有文件都需要有这些列,但如果您的.csv
文件有不同的列名,您可以按如下方式指定它们:
mycolnames = {"token" : "customtokenid", "upos" : "customuposid", "doc_id" : "customdocid", "sid" : "customsentenceid", "tid" : "customtokenid"}
file_to_file_workflow("example_data.csv", "glove.42B.300d.txt", "model.h5", "model.json", "predicted_descriptors.csv", mycolnames)
您还可以通过导入仅更改几个默认列名flavorfetcher.datamunging.default_col_names
:
from flavorfetcher.datamunging import default_col_names as mycolnames
mycolnames['tid'] = "token_id"
mycolnames['sid'] = "sentence_id"
file_to_file_workflow("example_data.csv", "glove.42B.300d.txt", "model.h5", "model.json", "predicted_descriptors.csv", mycolnames)
在命令行中预测
快来了
在 R 中预测
R 和 RStudio 用户应该能够使用 R 包reticulate
从 R 脚本中调用此包的功能,但此功能尚未经过测试,仅应被视为高级用户的建议。
未来计划为 R 用户提供完整的教程。
训练
该descriptor_model
模块包含一个DescriptorNN
类的定义,其方法将允许有限的训练,但任何想要改变架构或微调模型的人都应该考虑实现一个具有相同/相似结构的模型keras
。
贡献
如果您使用此工具,最好的回馈方式是引用我们的论文并让我们知道它的表现!我们正在积极寻求改进这个工具。
为了让我们知道它是怎么做的,从你的数据集中提取大约 20 个句子(或更多),对它们进行标记,并将它们整理成一个整洁的格式。添加一个带有“基本事实”的列——0
对于大多数标记,1
如果你认为它是一个描述风味的词。通过我们的工具运行这个小数据集,并将结果发送给Leah Hamilton,并对您的数据/项目进行一些解释。如果该工具在数据上表现不佳,我们可能会就您的数据与您联系,以帮助每个人更好地使用它。即使这是不可能的,我们也感谢您以一种或另一种方式发送一份小报告!
此存储库仅适用于英文文本。如果您有兴趣识别另一种语言的描述符并使用该语言,请联系 Leah Hamilton了解潜在的合作。
故障排除
Python 设置
此软件包需要 python 3.7 或更高版本。如果你不知道 python 是如何工作的,如何安装它,或者如何运行 python 代码,你应该首先阅读并遵循Windows或Mac计算机的安装教程和交互式使用 python 教程。我们建议不要将 python 安装为anaconda
.
如果您在安装此软件包keras
时遇到问题,或者如果您收到任何与、tensorflow
、pip
或相关的错误消息setuptools
,特别是如果您使用的是 Mac,您可能会发现在虚拟环境中安装和运行此软件包更容易。请注意,一些tensorflow
“错误”更像是警告——如果代码继续运行,它可能没问题!
python 虚拟环境是 python的隔离安装,它允许您更好地控制安装的软件包的确切版本,而不会干扰或尝试使用系统上的其他 python 安装。
首先,决定将虚拟环境保存在哪里。这可能在您的文档文件夹中,或者您保存代码的任何地方。任何对您来说方便和难忘的东西。在您选择的命令行中导航到那里。
要在此处创建虚拟环境并安装所需的包,请运行代码:
python -m venv flavor-fetcher-test
flavor-fetcher-test\Scripts\activate
python -m pip install flavorfetcher
当您第一次设置虚拟环境时,每个系统只需要运行一次。如果需要,您可以更改虚拟环境的名称 ( flavor-fetcher-test
)。您还必须在激活虚拟环境的行中进行相应的更改。
从这里开始,一旦激活了虚拟环境(您会知道,因为>
无论您在哪里输入,命令行都会用虚拟环境的名称替换字符),您可以使用启动 python 会话python
,然后按照上面的说明进行操作实际运行包。
任何时候你想使用虚拟环境,你都应该运行flavor-fetcher-test\Scripts\activate
,完成后,你可以通过输入来停用它deactivate
。
速度
在一台普通的计算机上,您应该估计运行这个包大约需要 5 分钟进行初始设置,然后需要 20-50 毫秒/令牌来进行预测。
如果您有一个特别大的数据集,您可能会考虑将其拆分为多个文件,因为程序在完成之前不会保存,并且您将在中断时丢失所有预测进度。
如果您有一台配备 NVIDIA GPU 的计算机,您还可以设置tensorflow
为使用 GPU 加速。为此,您应该按照 tensorflow 文档中的说明安装适当版本的 CUDA 和您自己的 GPU 兼容版本,而tensorflow
不是让这个包将其作为依赖项安装。如果您使用的是笔记本电脑并且不确定您是否有 NVIDIA GPU,那么您可能没有。pip
文件
README.md
- 这个文件。LICENSE
- 提供此软件的 GPL v3.0 许可证。MANIFEST.in
&pyproject.toml
-pip
或其他构建器制作此代码的可安装版本所需的文件。不要移动或改变这些。src/makepredictions.py
- 一个带有函数的 python 模块file_to_file_workflow()
,可以给定一个.csv
reviews_file的文件位置,一个.h5
具有适当架构的模型文件,300 维GloVe 嵌入(glove.42B.300d.txt
),一个设置文件(.json
带有CONTEXT_WINDOW_SIZE
和GLOVE_EMBEDDING_DIMENSIONS
用于训练模型),和一个输出文件(.csv
, 当前不应该存在)。如果列名与示例文件src/ata/Example Whiskey Reviews.csv
中的列名不同,则必须使用最后一个参数将列名指定为字典,如使用示例中所示。该文件也可以作为脚本从命令行运行,默认情况下会重现“通过使用深度学习对威士忌词典进行感官描述符分析”的结果但可用于使用预训练模型来预测具有适当参数的任何标记化和 POS 标记数据集中的描述符。src/datamunging.py
- 一个带有许多帮助函数的 python 模块,用于删除标点符号、为 重新索引标记keras
、将标记转换为 GloVe 嵌入,以及设置每个标记的上下文窗口。主要由src/makepredictions.py
src/descriptor_model.py
- 一个定义类的 python 脚本DescriptorNN
,它包含一个(经过训练的)描述符预测模型并用于进行预测。src/data/100_2021-04-20 10_38_24.203316_3_epochs_re-run_model.h5
- 在论文“通过使用深度学习对威士忌词典进行感官描述符分析”中训练和使用的确切网络。有必要使用src/makepredictions.py
.src/data/100_2021-04-20 10_38_24.203316_3_epochs_re-run_model.json
- 一个设置文件,应该与训练的模型一起保存和分发,以指定CONTEXT_WINDOW_SIZE
和GLOVE_EMBEDDING_DIMENSIONS
用于训练模型,以便可以对适当形状的数据进行预测。src/data/Example Whiskey Reviews.csv
- 一个数据文件,包含来自Whiskycast和WhiskyAdvocate网站的 100 条选定评论中的每个标记一行,用于预测。通过 CleanNLP 使用 SpaCy 完成标记化和注释。仅使用字段upos
、token
、doc_id
、sid
和tid
。它还包含由我们机器上提供的 LSTM 计算的预测 (expected_prediction
),因此您可以确认包按预期工作。
引用这个包
如果您在任何已发表的作品中使用此软件包,请引用相关的出版物:
米勒,C。汉密尔顿,L。Lahne, J. 2021。通过使用深度学习对威士忌词典进行感官描述符分析。食品10(7), 1633. https://doi.org/10.3390/foods10071633
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
flavorfetcher -1.0.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3c88666c85f3ae01c90367305a3c62985eb0b33c2bfa307fa3a97452c84012b9 |