预处理文本
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
对文本执行清理操作
类别:文本分析
模块概述
本文介绍如何使用 机器学习 Studio (经典) 中的预处理文本模块来清理和简化文本。 通过预处理文本,可以更轻松地从文本创建有意义的特征。
例如,预 处理文本 模块支持对文本执行以下常见操作:
- 删除非索引字词
- 使用正则表达式搜索并替换特定目标字符串
- 词形还原,它将多个相关字词转换为同一个规范形式
- 对语音的特定部分进行筛选
- 大小写规范化
- 删除某些特定类别的字符,如数字、特殊字符和重复字符序列(如 "aaaa")
- 标识和删除电子邮件和 URL
可以选择使用哪些清理选项,还可以选择指定非特定字词的自定义列表。
本模块目前支持六种语言:英语、西班牙语、法语、荷兰语、德语和意大利语。
如何配置文本预处理
将 "预处理文本" 模块添加到工作室中的试验 (经典) 。 可以在“文本分析”下找到此模块。
连接一个数据集,其中至少有一个列包含文本。
如果要预处理的文本全部使用相同的语言,请从"语言" 下拉列表中选择该 语言。 使用此选项时,使用特定于所选语言的语言规则对文本进行预处理。
若要预处理可能包含多种语言的文本,请选择" 列包含语言" 选项。
然后,使用 Culture-language 列 属性选择数据集中指示每行使用的语言的列。 列必须包含标准语言标识符,例如"英语"或
en
。根据此标识符,模块应用相应的语言资源处理文本。
如果数据集不包含此类标识符,请使用 检测 语言模块预先分析语言,并生成标识符。
提示
如果包含不支持的语言,则引发错误。 有关详细信息 ,请参阅 技术说明部分。
按语音的一部分删除:如果要应用部分语音分析,请选择此选项。 然后,可以使用词性部分标记删除某些字词类。
- 删除名词:选择此选项可删除名词。
- 删除形容词:选择此选项可删除形容词。
- 删除谓词:选择此选项可删除谓词。
有关所使用的部分语音识别方法详细信息,请参阅 技术说明 部分。
要清理的文本列:选择要预处理的列。
删除非索引字词:如果要将预定义的非索引字列表应用于文本列,请选择此选项。 停止字删除在任何其他进程之前执行。
Stopword 列表依赖于语言,可自定义;有关详细信息,请参阅技术 说明 部分。
词形还原:如果希望以规范形式表示字词,请选择此选项。 此选项可用于减少其他类似文本标记的唯一匹配项的数量。
词形化过程高度依赖于语言;有关详细信息 ,请参阅 技术说明部分。
检测句子:如果希望模块在执行分析时插入句子边界标记,请选择此选项。
此模块使用三个管道字符
|||
系列来表示语句终止符。(可选)可以使用正则表达式执行自定义查找和替换操作。
- 自定义正则表达式:定义要搜索的文本。
- 自定义替换字符串:定义单个替换值。
将大小写规范化为小写:如果要将 ASCII 大写字符转换为小写形式,请选择此选项。
如果字符未规范化,则大写字母和小写字母中的同一单词被视为两个不同的单词:
AM
例如, 与 相同am
。(可选)可以从处理的输出文本中删除以下类型的字符或字符序列:
- 删除数字:选择此选项可以删除指定语言中的所有数字字符。
确定构成数字的方面取决于域和语言。 如果数字字符是已知单词的组成部分,可能不会删除该数字。
删除特殊字符:使用此选项将任何非字母数字特殊字符替换为管道
|
字符。有关特殊字符的更多信息,请参阅 技术说明 部分。
删除重复字符:选择此选项可删除重复字符的任何序列。 例如,将删除类似"aaaaa"的序列。
删除电子邮件地址:选择此选项可以删除格式
<string>@<string>
的任何序列。删除 URL:选择此选项可删除包含以下 URL 前缀的任何序列:
http
,https
ftp
www
展开谓词缩写形式:此选项仅适用于使用谓词缩写形式的语言;目前仅限英语。
例如,选择此选项后,可以将短语 "wouldn't stay there"(不会留在那里)替换为 "would not stay there"。
将反斜杠规范化为斜杠:选择此选项可将
\\
的所有实例映射到/
。将标记拆分为特殊字符:如果想将带有
&
、-
等字符的词语与这些字符拆分开来,请选择此选项。例如,字符串将
MS-WORD
分为两个标记: 和MS
WORD
。
示例
本文中的 以下示例Azure AI 库预 处理文本 模块 的使用:
技术说明
本部分提供有关基础文本预处理技术以及如何指定自定义文本资源的信息。
支持的语言
目前机器学习支持以下语言的文本预处理:
- 荷兰语
- 英语
- 法语
- 德语
- 意大利语
- 西班牙语
计划其他语言。 有关公告,机器学习 Microsoft 机器学习博客。
词形还原
词形化是标识单个规范形式以表示多个单词标记的过程。
机器学习 Studio (经典) 中包含的自然语言处理库结合了以下多个语言操作以提供词形化:
句子分离:在用于情绪分析和其他文本分析的免费文本中,句子经常是运行时或可能缺少标点符号。 输入文本可能构成任意长的文本区块,范围从推文或片段到完整段落,甚至文档。
工作室中使用的自然语言工具 (经典) 作为基础词法分析的一部分执行句子分隔。 但是,在输出中不会分隔句子。 还可以指定将句子边界标记为有助于进行其他文本处理和分析。
已标记化:确定单词边界的规则是依赖于语言的,即使是在单词之间使用空格的语言,也可以是复杂的。
某些语言 (如中文或日语) 不使用单词之间的任何空格,并且单词分离需要语形学分析。
因此,在此模块中使用的词汇切分方法和规则提供不同语言的不同结果。 这些标记规则是由 Microsoft Research 为每种支持的语言提供的文本分析库决定的,不能进行自定义。
词性标识:在任何一系列字词中,可能很难计算每个单词的语音的准确部分。 即使是 "时间飞像箭头" 这样简单的句子,也可能有许多人在) (著名的示例。 部分词性也有很大不同,具体取决于不同语言的 morphology。
在机器学习中,在给定当前句子上下文的情况下,消除歧义模型用于选择最有可能的语音部分。 使用词性信息来帮助筛选用于短语提取中的功能和帮助的单词。 但是,此模块的输出不显式包含 POS 标记,因此不能用于生成 POS 标记的文本。
生成字典窗体:一个词可能有多个 lemmas或字典形式,每个都来自不同的分析。 例如,英语单词大楼有两个可能的 lemmas: 生成 时,如果该单词为名词 ( "最高版本" ) ,则生成,或者在单词为谓词 ( "生成房子" ) 生成 。 在机器学习中,只生成一个最可能的字典形式。
词形还原输出示例
源 | 带有大小写转换的 doctors appointments |
---|---|
他是游泳 | 我是 |
他正在进行泳道 | 我开始进行泳道 |
游泳适用于构建判断力 | 泳道非常适合生成判断力 |
他正在构建大楼 | 我生成生成 |
我们都是建筑建筑 | 我们是构建的所有版本 |
注意
用于生成字典窗体的语言模型已针对各种通用和技术文本进行定型和测试,并在其他许多需要自然语言 Api 的 Microsoft 产品中使用。 不过,自然语言本质上是不明确的,而且所有词汇上100% 的准确性都是不可行的。 例如,词形还原可能受词性的其他部分或句子分析方式的影响。
如果需要执行其他预处理,或使用专用或域相关词汇执行语言分析,建议使用可自定义的 NLP 工具,例如 Python 和 R 中的可用工具。
特殊字符
特殊字符定义为不能识别为语音的任何其他部分的单个字符,可以包括标点符号:冒号、分号等。
非索引字
Stop word (或非索引字) 是经常从索引中删除的一个词,因为它很常见,并且为信息检索提供了很小的值,即使它可能具有语言含义。
例如,许多语言在明确和不确定的文章 ( "建筑物" 与 "a 建筑" ) 之间做出语义区分,但对于机器学习和信息检索而言,此信息有时不相关。 因此,您可能会决定丢弃这些字词。
机器学习环境包括每种支持的语言最常见非索引字的列表。
语言 | 非索引字数 | 示例 |
---|---|---|
荷兰语 | 49 | aan,af,al |
英语 | 312 | a,如上所述,以上 |
法语 | 154 | de、des、d '、la |
德语 | 602 | a,ab,aber |
意大利语 | 135 | a、adesso、ai |
西班牙语 | 368 | ésa, ésta, éste |
为方便起见,在 Azure 存储空间中提供了包含所有当前语言的默认非索引字的压缩文件: Stopwords.zip。
如何修改非索引字列表
我们预计许多用户想要创建自己的非索引字列表,或更改默认列表中包含的条款。 Cortana Intelligence Gallery中的以下试验演示了如何自定义一个非索引字表。
如果修改列表,或创建自己的非索引字表,请遵守以下要求:
文件必须包含单个文本列。 如果存在其他列,则可能会收到以下错误: "预处理文本错误列选择模式" 要清理的文本列 () 在输入数据集中选择的列,但实际提供2列 () 。 ( 错误 0022 ) "
如果发生这种情况,请查找非索引字列表最初导入的文件中是否存在空格、制表符或隐藏列。 根据文件的准备方式,文本中包含的选项卡或逗号也可能导致创建多个列。
每行只能包含一个单词。 出于分析文件的目的,通过插入空格来确定单词。
非索引字列表不能为空。
运算顺序
在此模块中,你可以将多个操作应用于文本。 但是,不能更改这些操作的应用顺序。 这可能会影响预期结果。
例如,如果将词形还原应用于文本,并使用非索引字删除,则在应用非索引字列表之前,所有单词都将转换为其 lemma 窗体。 因此,如果文本中包含不在非索引字列表中的单词,但其 lemma 在非索引字列表中,则会删除该单词。
务必提前测试目标术语,以保证正确的结果。
不支持的语言
如果文本列包含机器学习不支持的语言,我们建议您仅使用那些不需要与语言相关的处理的选项。 这有助于避免产生奇怪的结果。
此外,如果您使用 "选项" 列包含语言,则必须确保处理的文本中不包含不受支持的语言。 如果数据集中存在不受支持的语言或其标识符,则会生成以下运行时错误:
"预处理文本错误 (0039) :请指定支持的语言。"
为了避免由于检测到不支持的语言而导致整个试验失败,请使用 拆分数据 模块,并指定正则表达式,将数据集划分为支持的和不受支持的语言。
例如,下面的正则表达式基于为列 Sentence
检测到的语言来拆分数据集:
\"Sentence Language" Dutch|English|French|Italian|Spanish
如果您有一个包含语言标识符的列,或者如果您已生成此类列,则可以使用如下所示的正则表达式来筛选标识符列:
\"Sentence Iso6391 Name" nl|en|fr|it|es
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据 |
停止词 | 数据表 | 要删除的停止词的可选自定义列表 |
模块参数
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
删除 URL | 布尔 | True False |
必须 | 是 | 删除 URL |
语言 | 语言 | 英语 西班牙语 法语 荷兰语 德语 意大利语 |
必选 | 英语 | 选择要预处理的语言 |
要清除的文本列 | 列选择 | 必须 | StringFeature | 选择要清除的文本列 | |
自定义正则表达式 | 字符串 | 可选 | 指定自定义正则表达式 | ||
自定义替换字符串 | 字符串 | 可选 | 指定自定义正则表达式的自定义替换字符串 | ||
删除停止词 | 布尔值 | 必须 | 是 | 删除停止词 | |
词形还原 | 布尔值 | 必须 | 是 | 使用词形化 | |
按语音的一部分删除 | True False 类型 | true false |
必须 | False | 指示是否应当使用词性分析来识别和删除某些单词类 |
删除名词 | 布尔 | 当选择了" 按语音的一部分筛选" 选项时适用 | true | 删除名词 | |
删除形容词 | 布尔 | 当选择了" 按语音的一部分筛选" 选项时适用 | true | 删除形容词 | |
删除谓词 | 布尔 | 当选择了" 按语音的一部分筛选" 选项时适用 | true | 删除谓词 | |
检测句子 | 布尔值 | 必须 | 是 | 通过添加句子终止符"|||\",供 n 元语法特征提取器模块使用 | |
将大小写规范化为小写 | 布尔值 | 必须 | 是 | 将大小写规范化为小写 | |
删除数字 | 布尔值 | 必须 | 是 | 删除数字 | |
删除特殊字符 | 布尔值 | 必须 | 是 | 删除非字母数字特殊字符,并将其替换为"|"字符 | |
删除重复字符 | 布尔值 | 必须 | 是 | 删除重复字符 | |
删除电子邮件地址 | 布尔值 | 必须 | 是 | 删除电子邮件地址 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
结果数据集 | 数据表 | 结果数据集 |
例外
异常 | 描述 |
---|---|
错误 0003 | 如果一个或多个输入为 null 或为空,则会发生异常。 |
错误 0030 | 如果无法下载文件,则会发生异常。 |
错误 0048 | 如果无法打开文件,则会发生异常。 |
错误 0049 | 如果无法分析文件,则会发生异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。