Lagrange.RagBot/notebook/experiment.ipynb

282 lines
33 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.manifold import TSNE\n",
"import yaml\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import sys\n",
"import os\n",
"\n",
"sys.path.append(os.path.abspath('..'))\n",
"from prompt import PromptEngine"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n",
"/data/zhelonghuang/miniconda3/lib/python3.11/site-packages/huggingface_hub/file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n",
" warnings.warn(\n"
]
}
],
"source": [
"# from BCEmbedding import EmbeddingModel\n",
"from langchain_community.embeddings import HuggingFaceEmbeddings\n",
"sentences = ['python 是什么', '请介绍一下 python']\n",
"# model = EmbeddingModel(model_name_or_path=\"maidalun1020/bce-embedding-base_v1\")\n",
"model = HuggingFaceEmbeddings(model_name='maidalun1020/bce-embedding-base_v1')"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"embeddings = model.embed_documents(sentences)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(['请问 property.json 如何配置?',\n",
" '我的自动补全无法使用是不是有bug',\n",
" '帮我上传一下这份数据',\n",
" 'surface了解一下',\n",
" '大佬们为啥我的digital ide启动之后所有功能都没启动捏我配置了property文件然后插件的vivado路经和modelsim路经都加上了',\n",
" '这群要被chisel夺舍了吗',\n",
" 'Metals一开直接报错',\n",
" '话说digital-ide打开大的verilog卡死了',\n",
" '请问一下第一次点击对文件仿真可以出波形文件再次点击的时候就会提示unknown module type了。是哪个配置没配置好',\n",
" '怎么调整是哪个版本的vivado来构建工程呢',\n",
" '咱们这个插件win7的vscode是不是只能用很早之前的版本',\n",
" '帮我将这份数据保存到服务器上',\n",
" '他这个意思是 单个功耗很低 但是功耗低那肯定性能就寄 频率肯定不高 靠人多'],\n",
" [1, 2, 3, 4, 1, 4, 4, 2, 1, 1, 1, 3, 4])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"engine = PromptEngine('../config/story.yml')\n",
"\n",
"sentences = []\n",
"labels = []\n",
"for story in engine.stories:\n",
" sentences.append(story.message)\n",
" labels.append(engine.intent2id[story.intent])\n",
"sentences, labels"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(13, 768)"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"embedding = model.embed_documents(sentences)\n",
"embedding = np.array(embedding)\n",
"embedding.shape"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"tsne = TSNE(n_components=2, perplexity=3)\n",
"plots = tsne.fit_transform(embedding)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x7f3a0b52e6d0>"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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NWqUOHz4sNi4cWPEe7/Wmj9/vrjjjjtE165dRVZWlli/fr2orKz0H79ef/11cfz4cZGdnS1uvfVWsWXLFrFly5aI9x3iingDra7ly5c3eg178ODBArh0e1djjh075l/Hk08+KQ4dOiRcLpeoqqoSf//730V2dnbE9+1a9x2AuPHGG8XatWuF0+kUlZWVYv78+UKW5YD1DB48WOzYsUPU19eLw4cPi4kTJ0Z83662PvjggyafIzBhwgSxZ88ecfHiRXHhwgVRWloacGtftNaPfvQjUVJSIs6fPy9cLpfYs2ePePrpp/1nzRqqT58+YtOmTaKurk6cOnVKzJ49O+K9X0tNnDixyTkssf6dN9Rjjz0mjh8/Lurr60Vpaam4/fbbI95TsKspDf+e+v73vy82btwoqqqqRF1dnTh48KDIz8+PieeofPTRR6K8vFzU19eLU6dOiY8++ihg3o3FYhGvvfaaOHfunLh48aL49NNPA4J6LFbc//0fIiIiIsNpM89RISIioujDoEJERESGxaBCREREhsWgQkRERIbFoEJERESGxaBCREREhsWgQkRERIbFoEJERESGxaBCREREhsWgQkRERIbFoEJERESGxaBCREREhvX/AxNJWBoOZD3PAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"labels = np.array(labels)\n",
"for label in set(labels):\n",
" mask = labels == label\n",
" cor_plots = plots[mask]\n",
" plt.scatter(cor_plots[:, 0], cor_plots[:, 1], s=50, alpha=0.9, label=label)\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-1 {color: black;}#sk-container-id-1 pre{padding: 0;}#sk-container-id-1 div.sk-toggleable {background-color: white;}#sk-container-id-1 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-1 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-1 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-1 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-1 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-1 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-1 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-1 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-1 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-1 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-1 div.sk-item {position: relative;z-index: 1;}#sk-container-id-1 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-1 div.sk-item::before, #sk-container-id-1 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-1 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-1 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-1 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-1 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-1 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-1 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-1 div.sk-label-container {text-align: center;}#sk-container-id-1 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-1 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">LogisticRegression</label><div class=\"sk-toggleable__content\"><pre>LogisticRegression()</pre></div></div></div></div></div>"
],
"text/plain": [
"LogisticRegression()"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"log_model = LogisticRegression()\n",
"log_model.fit(embedding, labels)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([4])"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_sentence = ['咖啡喝不了,喝了胃不舒服']\n",
"test_embedding = model.embed_documents(test_sentence)\n",
"log_model.predict(test_embedding)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['../embedding_mapping.sklearn']"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import joblib\n",
"joblib.dump(log_model, '../embedding_mapping.sklearn')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"log_model = joblib.load('../model/embedding_mapping.sklearn')"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([4])"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"test_sentence = ['咖啡喝不了,喝了胃不舒服']\n",
"test_embedding = model.embed_documents(test_sentence)\n",
"log_model.predict(test_embedding)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "base",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}