lm挑战-评估预测语言模型的库和工具。
lmchallenge的Python项目详细描述
#语言模型挑战(lm挑战)
[![生成状态](https://travis-ci.com/microsoft/lmchallenge.svg?token=psuqkrdl8qs6yflsqptp&;branch=master)(https://travis ci.com/microsoft/lm challenge)
这是一个评估预测性语言模型的库和工具。这是lm challenge用户的指南;您可能还希望看到集成程序的
-[数据格式](doc/formats.md)-[开发注释](doc/dev.md)对于希望扩展lm challenge的开发人员来说,lm challenge是什么?
通常很难比较语言模型的性能。有的模型输出概率,有的模型输出分数;有的模型输出单词,有的模型输出语素、字符或字节。词汇覆盖范围各不相同。因此,公平地比较它们是困难的。因此,在lm challenge中,我们有一些非常简单的"挑战游戏",可以在测试语料库中评估(并帮助比较)语言模型。
注意:大多数lm挑战工具都是基于单词的(尽管所有工具都可以应用于子单词"character composi国家"单词模型)。另外,我们假设语言模型是"前向上下文"的,因此它只根据前面的单词/字符预测单词或字符。
\getting started
install lm challenge from the published python package:
pip3 install--user lmchallenge
(或来自此存储库"python3 setup.py install--user`.)
**安装:**lm challenge需要一个模型来评估。我们在"sample"中包含了一个示例ngram模型实现。下载数据和构建模型(这可能需要几分钟):
cd sample/
./prepare.sh
**model repl:*现在您可以使用示例脚本来评估非常基本的ngram模型(请参阅[ngram.py](sample/ngram.py),如果集成您自己的pre,您可能会发现它很有用发音模式)。_请注意,此命令不会终止,因为它启动了一个交互式程序:
python3 ngram.py words data/words.3gram
这将启动一个交互式程序,该程序可以接受一个单词后跟一个硬"tab"字符和任何参数的命令,例如:
>;预测<;tab>;
=0.0000在-2.0000中的-1.0000…
若要使用词上下文进行查询,请尝试以下操作(确保在查询末尾的"收藏夹"后面留一个尾随空格):
>;预测<;tab>;我最喜欢的0.0000首歌曲的
-1.0000 the-2.0000…
n文本。API还有更多内容(请参见[格式](doc/formats.m d)了解更多详细信息),但由于您通常不会直接使用API,因此让我们继续在此模型上运行lm challenge(因此使用"ctrl+d"退出预测程序,返回到shell)。
**求值:**为此m运行lm challengeodel,我们将一些文本导入"lmc run",并保存结果:
head-n 10 data/wiki.test.tokens lmc run"python3 ngram.py words data/words.3gram"wc>;out/w3.wc.log
`公用事业。注意:`jq`这里是可选的,但这是一个非常方便的程序,可以用来处理json。
现在让我们尝试与一个功能较弱的模型进行比较:
head-n 10 data/wiki.test.tokens lmc run"python3 ngram.py words data/words.2gram"wc>;out/w2.wc.log
lmcstats out/*.wc.log jq.
两个模型的聚合级别预测和完成状态应该略有不同。但是我们可以从详细检查日志中得到更好的图片:
我们还可以很好地打印两种模型之间的差异:
仅筛选大写单词的日志,并打印摘要统计信息:
在这个小的、统计上不重要的例子中,有意义的词比一般的词更难预测。
**其他挑战:*其他lm挑战可以用类似的方式运行和检查,请参见"lmc run--help"。
非常灵活-可用于多种方式:
1.命令行界面
2.python api
3.日志文件格式
1。命令行接口
这是使用lm challenge的最简单方法,如果您的模型是用支持管道stdout/stdin的任何语言实现的,则可以使用。请参阅上面的[入门](入门)指南和cli帮助:
lmc run--help
python api
如果您的模型在python 3中运行,并且您希望用python编写求值脚本,那么可以直接使用api:
import lmchallenge as lmc
help(lmc)
我们还没有发布HTML,但是已经用"pdoc"进行了测试:
$pdoc--http
日志文件格式
如果需要批处理或分发以获得足够的计算速度,则可以自己编写lm challenge日志文件。这意味着您可以使用lm challenge来处理和分析数据,而不必强制使用特定的执行模型。为此:
1.编写包含lmchallenge日志数据的jsonline文件:
-请参阅描述日志格式的[数据格式](doc/formats.md)说明。
-(可选)使用正式描述可接受日志数据的[json架构](lmchallenge/log.schema)。
-(可选)使用cli`lmc validate`(或python api`lmchallenge.validate.validate`)检查日志是否符合架构。
-请注意,如果日志文件是并行生成的,则通常可以将它们连接起来。
2。使用lm challenge工具分析日志(除了"lmc run"之外的所有内容)。
-`wc`-单词完成挑战-下一个单词预测/完成任务(生成hit@n&completion ratio)
-`we ce`-单词字符熵挑战-语言概率分布任务(生成给定定义词汇的交叉熵)
-`wr`-单词重新登录G挑战-修正任务(产生准确度)
**测试文本**是纯文本数据(如真实人类所输入和理解的那样!)lm challenge没有定义测试文本-我们希望提供它。为了评估语言模型,您还需要决定另一件事。
a**语言模型**是一个可执行的过程,它以特定的文本格式响应来自一个挑战游戏的命令,通常由一个与测试语言相同的预训练模型组成。ext_u.
\word completion`wc`
word completion任务扫描测试文本中的单词,在每一点查询语言模型以获取下一个单词预测和单词完成情况。
cat data lmc run"predict or"wc>;log
模型的目标应该是在其他单词之前预测正确的下一个单词(即尽可能低的排名),或者在前两个补全中预测失败,尽可能短的输入前缀。"wc"提供的统计数据包括:
-下一个单词预测
-`hit@n`-排名低于"n"的正确预测的比率
-`mrr`(平均倒数排名)-所有单词的"1/排名"总和
-完成
-`characters`-字符的比率re completed(例如,如果键入"hello",并在键入"he"后预测,则完成字符的比率将为"0.5")
-`tokens`-在完全键入之前完成的令牌的比率
请注意,标记"--仅限下一个单词"可用于加快计算速度。n,跳过所有前缀,只评估模型的下一个单词预测性能(这样就不会生成完成统计)。
用于评估语言模型的sure。这些求值器扫描文本,在每个点上查询语言模型以获取当前单词的规范化日志概率。
cat data lmc run"predictor"ce>;log
n只能在共享同一词汇表的模型之间进行比较。如果词汇量不同,熵任务也不同,不应该比较模型。因此,模型必须在其词汇表上生成一个"公平"的标准化日志概率(如果词汇表中没有单词,则从结果中省略分数)。它不应该合并单词的"等价类"(除非与正在评估的所有其他模型大体一致)。这方面的一个例子是规范化大写,使"fish"与"fish"得到相同的分数,或者给许多单词一个"词汇量外"的分数(这样,如果你要计算"p("fish")+p("fish")+p(其他所有东西)",它就不等于1)。简单地使用任何不能评分的单词(例如oov单词)是安全的,因为这有助于形成一个特殊的"熵指纹",它检查两个模型是否成功地对同一组单词进行了评分,因此在熵度量下是可比的。单词重新排序任务模拟草率的打字员输入文本,在输入文本后使用语言模型更正输入。这个挑战需要一个单词列表作为损坏单词(在目标语言中应该是一大组有效单词)的更正候选单词。数据源中的文本首先被损坏(好像是由一个草率的打字员造成的)。将被破坏的文本输入到邻近候选词的搜索中,根据所评估的语言模型对候选词进行评分。评估者测量校正、未校正和错误校正的结果。
cat data lmc run"predictor"wr vocab>;log
模型的目的是为正确的单词分配高分,为所有其他单词分配低分。我们通过将语言模型中的分数与每个单词的输入分数(使用Lanugage模型中未评分的单词的最小分数)混合,然后根据该分数进行排名来评估。如果排名靠前的预测是正确的话,那么这个例子就是成功的,否则就是失败。_input score_u是从该单词生成的特定损坏文本的日志概率,与用于损坏真单词的错误模型相同。为了对来自语言模型的不同分数范围具有鲁棒性,我们在统计数据之前优化了输入和语言模型的混合参数(这是自动完成的,但需要可选的依赖关系"scipy")。精度综合测量使用最佳混合比例,获得正确的最高预测值的最大比例。
大多数捐款要求您同意
捐款人许可协议(CLA),声明您有权并且实际上有权授予我们使用您的捐款的权利。有关详细信息,请访问https://cla.microsoft.com。
当您提交请求时,cla bot将自动确定是否需要提供cla并适当地装饰pr(例如标签、注释)。只需按照机器人提供的说明进行操作。您只需使用我们的CLA在所有回购协议中执行一次即可。
此项目采用了[Microsoft开源行为准则](https://open source.microsoft.com/code of conduct/)。
有关详细信息,请参阅[行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/)或
如有任何其他问题或意见,请与[opencode@microsoft.com]联系(邮件地址:opencode@microsoft.com)。
[![生成状态](https://travis-ci.com/microsoft/lmchallenge.svg?token=psuqkrdl8qs6yflsqptp&;branch=master)(https://travis ci.com/microsoft/lm challenge)
这是一个评估预测性语言模型的库和工具。这是lm challenge用户的指南;您可能还希望看到集成程序的
-[数据格式](doc/formats.md)-[开发注释](doc/dev.md)对于希望扩展lm challenge的开发人员来说,lm challenge是什么?
通常很难比较语言模型的性能。有的模型输出概率,有的模型输出分数;有的模型输出单词,有的模型输出语素、字符或字节。词汇覆盖范围各不相同。因此,公平地比较它们是困难的。因此,在lm challenge中,我们有一些非常简单的"挑战游戏",可以在测试语料库中评估(并帮助比较)语言模型。
注意:大多数lm挑战工具都是基于单词的(尽管所有工具都可以应用于子单词"character composi国家"单词模型)。另外,我们假设语言模型是"前向上下文"的,因此它只根据前面的单词/字符预测单词或字符。
\getting started
install lm challenge from the published python package:
pip3 install--user lmchallenge
(或来自此存储库"python3 setup.py install--user`.)
**安装:**lm challenge需要一个模型来评估。我们在"sample"中包含了一个示例ngram模型实现。下载数据和构建模型(这可能需要几分钟):
cd sample/
./prepare.sh
**model repl:*现在您可以使用示例脚本来评估非常基本的ngram模型(请参阅[ngram.py](sample/ngram.py),如果集成您自己的pre,您可能会发现它很有用发音模式)。_请注意,此命令不会终止,因为它启动了一个交互式程序:
python3 ngram.py words data/words.3gram
这将启动一个交互式程序,该程序可以接受一个单词后跟一个硬"tab"字符和任何参数的命令,例如:
>;预测<;tab>;
=0.0000在-2.0000中的-1.0000…
若要使用词上下文进行查询,请尝试以下操作(确保在查询末尾的"收藏夹"后面留一个尾随空格):
>;预测<;tab>;我最喜欢的0.0000首歌曲的
-1.0000 the-2.0000…
n文本。API还有更多内容(请参见[格式](doc/formats.m d)了解更多详细信息),但由于您通常不会直接使用API,因此让我们继续在此模型上运行lm challenge(因此使用"ctrl+d"退出预测程序,返回到shell)。
**求值:**为此m运行lm challengeodel,我们将一些文本导入"lmc run",并保存结果:
`公用事业。注意:`jq`这里是可选的,但这是一个非常方便的程序,可以用来处理json。
现在让我们尝试与一个功能较弱的模型进行比较:
head-n 10 data/wiki.test.tokens lmc run"python3 ngram.py words data/words.2gram"wc>;out/w2.wc.log
lmcstats out/*.wc.log jq.
两个模型的聚合级别预测和完成状态应该略有不同。但是我们可以从详细检查日志中得到更好的图片:
我们还可以很好地打印两种模型之间的差异:
仅筛选大写单词的日志,并打印摘要统计信息:
在这个小的、统计上不重要的例子中,有意义的词比一般的词更难预测。
**其他挑战:*其他lm挑战可以用类似的方式运行和检查,请参见"lmc run--help"。
非常灵活-可用于多种方式:
1.命令行界面
2.python api
3.日志文件格式
1。命令行接口
这是使用lm challenge的最简单方法,如果您的模型是用支持管道stdout/stdin的任何语言实现的,则可以使用。请参阅上面的[入门](入门)指南和cli帮助:
python api
如果您的模型在python 3中运行,并且您希望用python编写求值脚本,那么可以直接使用api:
import lmchallenge as lmc
help(lmc)
我们还没有发布HTML,但是已经用"pdoc"进行了测试:
$pdoc--http
日志文件格式
如果需要批处理或分发以获得足够的计算速度,则可以自己编写lm challenge日志文件。这意味着您可以使用lm challenge来处理和分析数据,而不必强制使用特定的执行模型。为此:
1.编写包含lmchallenge日志数据的jsonline文件:
-请参阅描述日志格式的[数据格式](doc/formats.md)说明。
-(可选)使用正式描述可接受日志数据的[json架构](lmchallenge/log.schema)。
-(可选)使用cli`lmc validate`(或python api`lmchallenge.validate.validate`)检查日志是否符合架构。
-请注意,如果日志文件是并行生成的,则通常可以将它们连接起来。
2。使用lm challenge工具分析日志(除了"lmc run"之外的所有内容)。
-`wc`-单词完成挑战-下一个单词预测/完成任务(生成hit@n&completion ratio)
-`we ce`-单词字符熵挑战-语言概率分布任务(生成给定定义词汇的交叉熵)
-`wr`-单词重新登录G挑战-修正任务(产生准确度)
**测试文本**是纯文本数据(如真实人类所输入和理解的那样!)lm challenge没有定义测试文本-我们希望提供它。为了评估语言模型,您还需要决定另一件事。
a**语言模型**是一个可执行的过程,它以特定的文本格式响应来自一个挑战游戏的命令,通常由一个与测试语言相同的预训练模型组成。ext_u.
\word completion`wc`
word completion任务扫描测试文本中的单词,在每一点查询语言模型以获取下一个单词预测和单词完成情况。
cat data lmc run"predict or"wc>;log
模型的目标应该是在其他单词之前预测正确的下一个单词(即尽可能低的排名),或者在前两个补全中预测失败,尽可能短的输入前缀。"wc"提供的统计数据包括:
-下一个单词预测
-`hit@n`-排名低于"n"的正确预测的比率
-`mrr`(平均倒数排名)-所有单词的"1/排名"总和
-完成
-`characters`-字符的比率re completed(例如,如果键入"hello",并在键入"he"后预测,则完成字符的比率将为"0.5")
-`tokens`-在完全键入之前完成的令牌的比率
请注意,标记"--仅限下一个单词"可用于加快计算速度。n,跳过所有前缀,只评估模型的下一个单词预测性能(这样就不会生成完成统计)。
用于评估语言模型的sure。这些求值器扫描文本,在每个点上查询语言模型以获取当前单词的规范化日志概率。
n只能在共享同一词汇表的模型之间进行比较。如果词汇量不同,熵任务也不同,不应该比较模型。因此,模型必须在其词汇表上生成一个"公平"的标准化日志概率(如果词汇表中没有单词,则从结果中省略分数)。它不应该合并单词的"等价类"(除非与正在评估的所有其他模型大体一致)。这方面的一个例子是规范化大写,使"fish"与"fish"得到相同的分数,或者给许多单词一个"词汇量外"的分数(这样,如果你要计算"p("fish")+p("fish")+p(其他所有东西)",它就不等于1)。简单地使用任何不能评分的单词(例如oov单词)是安全的,因为这有助于形成一个特殊的"熵指纹",它检查两个模型是否成功地对同一组单词进行了评分,因此在熵度量下是可比的。单词重新排序任务模拟草率的打字员输入文本,在输入文本后使用语言模型更正输入。这个挑战需要一个单词列表作为损坏单词(在目标语言中应该是一大组有效单词)的更正候选单词。数据源中的文本首先被损坏(好像是由一个草率的打字员造成的)。将被破坏的文本输入到邻近候选词的搜索中,根据所评估的语言模型对候选词进行评分。评估者测量校正、未校正和错误校正的结果。
cat data lmc run"predictor"wr vocab>;log
模型的目的是为正确的单词分配高分,为所有其他单词分配低分。我们通过将语言模型中的分数与每个单词的输入分数(使用Lanugage模型中未评分的单词的最小分数)混合,然后根据该分数进行排名来评估。如果排名靠前的预测是正确的话,那么这个例子就是成功的,否则就是失败。_input score_u是从该单词生成的特定损坏文本的日志概率,与用于损坏真单词的错误模型相同。为了对来自语言模型的不同分数范围具有鲁棒性,我们在统计数据之前优化了输入和语言模型的混合参数(这是自动完成的,但需要可选的依赖关系"scipy")。精度综合测量使用最佳混合比例,获得正确的最高预测值的最大比例。
大多数捐款要求您同意
捐款人许可协议(CLA),声明您有权并且实际上有权授予我们使用您的捐款的权利。有关详细信息,请访问https://cla.microsoft.com。
当您提交请求时,cla bot将自动确定是否需要提供cla并适当地装饰pr(例如标签、注释)。只需按照机器人提供的说明进行操作。您只需使用我们的CLA在所有回购协议中执行一次即可。
此项目采用了[Microsoft开源行为准则](https://open source.microsoft.com/code of conduct/)。
有关详细信息,请参阅[行为准则常见问题解答](https://opensource.microsoft.com/codeofconduct/faq/)或
如有任何其他问题或意见,请与[opencode@microsoft.com]联系(邮件地址:opencode@microsoft.com)。