spaCy与Streamlit集成可视化工具指南

本文详细介绍spacy-streamlit工具包,该工具提供spaCy模型可视化组件和Streamlit应用构建模块,包括依存关系解析、命名实体识别、文本分类等可视化功能,支持自定义配置和缓存优化。

spacy-streamlit: Streamlit应用的spaCy构建模块

该工具包包含用于可视化spaCy模型并通过Streamlit构建交互式spaCy驱动应用的实用程序。它包含多个可在自定义Streamlit应用中使用的构建模块,如句法依赖关系可视化器、命名实体、文本分类、通过词向量的语义相似性、词符属性等。

🚀 快速开始

可通过pip安装spacy-streamlit:

1
pip install spacy-streamlit

该工具包包含调用Streamlit并设置所有必需元素的构建模块。您可以直接在应用中使用单个组件并与其他元素组合,或调用可视化函数嵌入整个可视化器。

从spaCy下载英文模型开始使用:

1
python -m spacy download en_core_web_sm

然后将以下示例代码放入文件中:

1
2
3
4
5
6
# streamlit_app.py
import spacy_streamlit

models = ["en_core_web_sm", "en_core_web_md"]
default_text = "Sundar Pichai is the CEO of Google."
spacy_streamlit.visualize(models, default_text)

随后可通过streamlit run streamlit_app.py运行应用。

📦 示例:01_out-of-the-box.py

使用嵌入式可视化器及自定义设置:

1
streamlit run https://raw.githubusercontent.com/explosion/spacy-streamlit/master/examples/01_out-of-the-box.py

👑 示例:02_custom.py

在现有应用中使用独立组件:

1
streamlit run https://raw.githubusercontent.com/explosion/spacy-streamlit/master/examples/02_custom.py

🎛 API

可视化器组件

这些函数可在Streamlit应用中使用,它们在底层调用streamlit并设置所需元素。

函数 visualize

嵌入包含选定组件的完整可视化器。

1
2
3
4
5
6
import spacy_streamlit

models = ["en_core_web_sm", "/path/to/model"]
default_text = "Sundar Pichai is the CEO of Google."
visualizers = ["ner", "textcat"]
spacy_streamlit.visualize(models, default_text, visualizers)
参数 类型 描述
models List[str] / Dict[str, str] 可加载的spaCy模型名称(路径或包名)
default_text str 加载时分析的默认文本
default_model Optional[str] 可选默认模型名称
visualizers List[str] 要显示的可视化器名称
ner_labels Optional[List[str]] 要包含的NER标签
ner_attrs List[str] 命名实体表中显示的跨度属性
token_attrs List[str] 词符可视化器中显示的词符属性
similarity_texts Tuple[str, str] 相似性可视化器中的默认比较文本
show_json_doc bool 显示切换Doc的JSON表示的按钮
show_meta bool 显示切换当前管道meta.json的按钮
show_config bool 显示切换当前管道config.cfg的按钮
show_visualizer_select bool 显示侧边栏下拉菜单以选择要显示的可视化器
sidebar_title Optional[str] 侧边栏中显示的标题
sidebar_description Optional[str] 侧边栏中显示的描述(支持Markdown格式)
show_logo bool 在侧边栏中显示spaCy徽标
color Optional[str] 实验性:用于部分主要UI元素的主颜色
get_default_text Callable[[Language], str] 可选可调用对象,接收当前加载的nlp对象并返回默认文本

函数 visualize_parser

使用spaCy的displacy可视化器可视化依赖解析和词性标签。

1
2
3
4
5
6
import spacy
from spacy_streamlit import visualize_parser

nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a text")
visualize_parser(doc)

函数 visualize_ner

使用spaCy的displacy可视化器可视化Doc中的命名实体。

1
2
3
4
5
6
import spacy
from spacy_streamlit import visualize_ner

nlp = spacy.load("en_core_web_sm")
doc = nlp("Sundar Pichai is the CEO of Google.")
visualize_ner(doc, labels=nlp.get_pipe("ner").labels)

函数 visualize_spans

使用spaCy的displacy可视化器可视化Doc中的跨度。

1
2
3
4
5
6
7
8
9
import spacy
from spacy_streamlit import visualize_spans

nlp = spacy.load("en_core_web_sm")
doc = nlp("Sundar Pichai is the CEO of Google.")
span = doc[4:7]  # CEO of Google
span.label_ = "CEO"
doc.spans["job_role"] = [span]
visualize_spans(doc, spans_key="job_role", displacy_options={"colors": {"CEO": "#09a3d5"}})

函数 visualize_textcat

可视化训练文本分类器预测的文本类别。

1
2
3
4
5
6
import spacy
from spacy_streamlit import visualize_textcat

nlp = spacy.load("./my_textcat_model")
doc = nlp("This is a text about a topic")
visualize_textcat(doc)

函数 visualize_similarity

使用模型的词向量可视化语义相似性。如果模型中不存在向量将显示警告。

1
2
3
4
5
import spacy
from spacy_streamlit import visualize_similarity

nlp = spacy.load("en_core_web_lg")
visualize_similarity(nlp, ("pizza", "fries"))

函数 visualize_tokens

可视化Doc中的词符及其属性。

1
2
3
4
5
6
import spacy
from spacy_streamlit import visualize_tokens

nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a text")
visualize_tokens(doc, attrs=["text", "pos_", "dep_", "ent_type_"])

缓存辅助函数

这些辅助函数尝试缓存加载的模型和创建的Doc对象。

函数 process_text

使用给定名称的模型处理文本并创建Doc对象。调用load_model辅助函数加载模型。

1
2
3
4
5
6
import streamlit as st
from spacy_streamlit import process_text

spacy_model = st.sidebar.selectbox("Model name", ["en_core_web_sm", "en_core_web_md"])
text = st.text_area("Text to analyze", "This is a text")
doc = process_text(spacy_model, text)

函数 load_model

从路径或已安装包加载spaCy模型并返回加载的nlp对象。

1
2
3
4
5
import streamlit as st
from spacy_streamlit import load_model

spacy_model = st.sidebar.selectbox("Model name", ["en_core_web_sm", "en_core_web_md"])
nlp = load_model(spacy_model)
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计