Bulk 是一个快速的开发工具,用于应用一些批量标签。给定一个带有二维嵌入的准备好的数据集,它可以生成一个界面,允许您快速添加一些批量(尽管不太精确)注释。
python -m pip install --upgrade pip
python -m pip install bulk
批量的未来是提供可以在笔记本中为您提供帮助的小部件。目前, BaseTextExplorer
是受支持的主要小部件。给定一些预处理数据,您可以使用资源管理器来浏览文本嵌入的 2D UMAP。
import pandas as pd
from umap import UMAP
from sklearn . pipeline import make_pipeline
# pip install "embetter[text]"
from embetter . text import SentenceEncoder
# Build a sentence encoder pipeline with UMAP at the end.
enc = SentenceEncoder ( 'all-MiniLM-L6-v2' )
umap = UMAP ()
text_emb_pipeline = make_pipeline (
enc , umap
)
# Load sentences
sentences = list ( pd . read_csv ( "tests/data/text.csv" )[ 'text' ])
# Calculate embeddings
X_tfm = text_emb_pipeline . fit_transform ( sentences )
# Write to disk. Note! Text column must be named "text"
df = pd . DataFrame ({ "text" : sentences })
df [ 'x' ] = X_tfm [:, 0 ]
df [ 'y' ] = X_tfm [:, 1 ]
要使用该小部件,您只需运行以下命令:
from bulk . widgets import BaseTextExplorer
widget = BaseTextExplorer ( df )
widget . show ()
这将使我们能够快速探索数据中出现的集群。您可以按住鼠标光标进入选择模式,当您选择项目时,您将看到右侧出现一个随机子集。您可以通过单击重新采样按钮从您的选择中重新采样。
当您做出选择时,您可以看到右侧更新的小部件,但您也可以从 Python 属性中获取数据。
widget . selected_idx
widget . selected_texts
widget . selected_dataframe
能够探索这些集群是很巧妙的,但感觉如果我们有更多可用的工具,我们可能会更容易地探索一切。特别是,我们希望有一个编码器,以便我们可以在嵌入空间中使用查询。下面的 UI 将允许我们通过使用文本提示更新颜色来进行更多交互探索。
from embetter . text import SentenceEncoder
enc = SentenceEncoder ( 'all-MiniLM-L6-v2' )
# Pay attention here! The rows in df needs to align with the rows in X!
widget = BaseTextExplorer ( df , X = X , encoder = enc )
widget . show ()
借助 ipywidget 和 anywidget 等工具,我们可以真正开始构建一些工具,使笔记本成为满足您的数据需求的首选位置。如果有一些合适的小部件,您将永远无法超越 Jupyter 笔记本!
该项目的主要兴趣是开发数据质量工具。能够批量选择数据点感觉是一个很好的起点。也许您可以先找到一个有趣的子集来注释,也许当您看到两个不同的集群应该是一个时,您可能会感到惊讶。所有美好的事情都可以发生在笔记本中!
Bulk 还附带了一个小型 Web 应用程序,该应用程序使用 Bokeh 为您提供基于 UMAP 嵌入表示的注释界面。它提供了一个文本界面。该界面是该项目的原始界面/功能。
它还具有图像界面。
我们将保留这些界面,但该项目的未来将是来自 Jupyter 笔记本的小部件。然而,网络应用程序当然仍然有用。
如果您想了解更多信息,您可能会喜欢 YouTube 上的这个文本视频和 YouTube 上的计算机视觉视频。
要使用批量文本,您首先需要准备一个 csv 文件。
笔记
下面的示例使用 embetter 生成嵌入并使用 umap 来减少维度。但您可以完全自由地使用您喜欢的任何文本嵌入工具。您需要单独安装这些工具。请注意,embetter 在底层使用了句子转换器。
import pandas as pd
from umap import UMAP
from sklearn . pipeline import make_pipeline
# pip install "embetter[text]"
from embetter . text import SentenceEncoder
# Build a sentence encoder pipeline with UMAP at the end.
text_emb_pipeline = make_pipeline (
SentenceEncoder ( 'all-MiniLM-L6-v2' ),
UMAP ()
)
# Load sentences
sentences = list ( pd . read_csv ( "original.csv" )[ 'sentences' ])
# Calculate embeddings
X_tfm = text_emb_pipeline . fit_transform ( sentences )
# Write to disk. Note! Text column must be named "text"
df = pd . DataFrame ({ "text" : sentences })
df [ 'x' ] = X_tfm [:, 0 ]
df [ 'y' ] = X_tfm [:, 1 ]
df . to_csv ( "ready.csv" , index = False )
您现在可以使用此ready.csv
文件来应用一些批量标签。
python -m bulk text ready.csv
如果您正在寻找示例文件来使用,可以下载此存储库中的演示 .csv 文件。该数据集包含 Kaggle 上找到的数据集的子集。您可以在这里找到原件。
您还可以将一个名为“颜色”的额外列传递到 csv 文件。然后,该列将用于为界面中的点着色。
您还可以将--keywords
传递给命令行应用程序以突出显示包含特定关键字的元素。
python -m bulk text ready.csv --keywords "deliver,card,website,compliment"
下面的示例使用embetter
库创建批量标记图像的数据集。
笔记
下面的示例使用 embetter 生成嵌入并使用 umap 来减少维度。但您可以完全自由地使用您喜欢的任何文本嵌入工具。您需要单独安装这些工具。请注意,embetter 在底层使用 TIMM。
import pathlib
import pandas as pd
from sklearn . pipeline import make_pipeline
from umap import UMAP
from sklearn . preprocessing import MinMaxScaler
# pip install "embetter[vision]"
from embetter . grab import ColumnGrabber
from embetter . vision import ImageLoader , TimmEncoder
# Build image encoding pipeline
image_emb_pipeline = make_pipeline (
ColumnGrabber ( "path" ),
ImageLoader ( convert = "RGB" ),
TimmEncoder ( 'xception' ),
UMAP (),
MinMaxScaler ()
)
# Make dataframe with image paths
img_paths = list ( pathlib . Path ( "downloads" , "pets" ). glob ( "*" ))
dataf = pd . DataFrame ({
"path" : [ str ( p ) for p in img_paths ]
})
# Make csv file with Umap'ed model layer
# Note! Bulk assumes the image path column to be called "path"!
X = image_emb_pipeline . fit_transform ( dataf )
dataf [ 'x' ] = X [:, 0 ]
dataf [ 'y' ] = X [:, 1 ]
dataf . to_csv ( "ready.csv" , index = False )
这会生成一个 csv 文件,可以通过以下方式批量加载:
python -m bulk image ready.csv
您还可以为图像生成一组缩略图。如果您正在处理大型数据集,这可能很有用。
python -m bulk util resize ready.csv ready2.csv temp
这将创建一个名为temp
的文件夹,其中包含所有调整大小的图像。然后,您可以使用该文件夹作为--thumbnail-path
参数。
python -m bulk image ready2.csv --thumbnail-path temp
您还可以使用批量下载一些数据集来使用。欲了解更多信息:
python -m bulk download --help
该界面可以帮助您非常快速地添加标签,但标签本身可能相当嘈杂。该工具的预期用例是准备稍后在 prodi.gy 中使用的有趣子集。