{ "cells": [ { "cell_type": "code", "execution_count": 1, "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": 2, "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": 3, "metadata": {}, "outputs": [], "source": [ "embeddings = model.embed_documents(sentences)" ] }, { "cell_type": "code", "execution_count": 4, "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", " '我平时写代码就喜欢喝茶',\n", " '感觉现在啥都在往AI靠',\n", " '请问你们自动对齐插件用的啥?',\n", " '不得不放一下我的咖啡笔记了',\n", " 'stm32有什么好玩的应用不',\n", " '别人设置的肯定有点不合适自己的',\n", " 'http://hehezhou.cn/register2024/AArch64-regindex.html',\n", " '因为他们py本领不是很强,需要这些东西辅助',\n", " '写C写多了,顺手在pycharm写了个main.c',\n", " '好流畅的にほんじんです',\n", " '有没有接触过UI开发的,想做一款寄存器管理的工具,想把界面做的好看一点',\n", " '现在嘉立创也在做FPGA了?',\n", " '大佬们,更新0.3.3之后,用iverilog仿真,testbench中还是例化模块出错:unknown module type,这是什么原因啊?',\n", " '查了一下记录,2017年买的静电容',\n", " '我小时候电脑刚买回来一星期就被我玩坏了',\n", " 'command not found: python',\n", " 'path top.v is not a hdlFile 请问报这个错误大概是啥原因啊',\n", " '咖啡喝不了,喝了胃不舒服',\n", " '关于波形显示的一些建议',\n", " '采用iverilog生成的VCD貌似无法解析仿真数据',\n", " '【v0.3.2】模块调用后netlist生成错误,且仿真报错',\n", " '网表优化与插入文档',\n", " '插件文档导出问题',\n", " '【v0.3.2】testbench修改之后再次仿真会报错',\n", " '[0.3.2] [问题] 含参数的 Verilog 模块自动例化,代码格式不正确',\n", " '【报错】RuntimeError: null function or function signature mismatch',\n", " '报错:verilog解析器无法解析以下代码',\n", " '报错:verilog解析器的bug',\n", " '功能建议-能增加点类似Verilog-Mode的功能么',\n", " '报错:RuntimeError: null function or function signature mismatch、无法识别HDL文件',\n", " '例化模块自动生成tb文件报错Unknown module type',\n", " 'Errors happen when parsing d:/danpj/fpga/modelsim/mod1/user/src/count4.v. Error: \"RuntimeError: null function or function signature mismatch\". Just propose a valuable issue in our github repo ',\n", " '自动例化报错',\n", " '【问题】【0.3.2】重复提示 Error: \"RuntimeError: null function or function signature mismatch\"',\n", " '【0.3.2】【问题】1无法解析localparam 2 带参数模块例化',\n", " '基础教程太少',\n", " '.v源文件未被正确识别',\n", " '重复仿真时报错',\n", " '插件不能使用',\n", " '关于netlist的生成错误',\n", " '[0.3.2] 支持对verilator 的dpi-c机制的支持 ',\n", " '[0.3.2] 离线支持+SV支持',\n", " 'Bad webstie connection on README',\n", " '在声明数据位宽时使用宏定义会报错',\n", " '0.3.2 无verilog语法检查,且提示RuntimeError',\n", " '[0.3.2] 模块定义跳转偶尔会出现问题',\n", " '[0.3.2] 代码补全有多个内容完全相同的选项',\n", " '[0.3.2] 例化模块的类型,模块名称的代码高亮不变色',\n", " '文档中的params和ports数反了',\n", " '[建议]:优化Formatter与文档生成',\n", " '[0.3.2] Linter(vivado) 启用无效 (还是说我用的vivado2023太新了?)',\n", " '[0.3.2]module的#后的parameter能悬停显示数值, 但内部parameter的不能',\n", " '[0.3.2]param语法错误会弹右下角报错弹窗, TreeView刷新按钮无效',\n", " '0.3.0版本后存在bug,构建项目后仿真无法运行',\n", " '建议:模块例化可以基于文件夹来检索,当文件比较多时更整洁一点。',\n", " 'Add Questa-Sim into the linter option',\n", " '悬停提示对 /**/ 型的注释有误',\n", " '仿真时因为文件夹名字存在空格产生错误',\n", " 'filetype from json to jsonc (support comments)',\n", " '语法识别错误',\n", " 'code to doc',\n", " 'WSL环境点击“显示当前文件的FSM图”时会发生扩展远程主机终止的错误',\n", " '在架构里不能解析include后的模块',\n", " 'treeview在文件移动时遇到问题',\n", " 'treeview在文件变动时产生错误',\n", " '[0.3.0 beta] iverilog指令错误',\n", " 'Will verilator be supported?',\n", " '[0.3.0 beta] 高亮颜色错误',\n", " '状态机显示有问题',\n", " 'xdc文件无法高亮显示',\n", " 'Ubuntu环境下,digital ide对配置环境有问题。',\n", " '[0.3.0 beta] \"定义跳转\"定义位置出错',\n", " '[0.3.0 beta] \"library导入文件\"模块解析报错',\n", " '[0.3.0 beta] \"对当前文件进行仿真\"功能报错',\n", " '[0.3.0 beta] 由于插件不能分析出使用了\"include\"语法, 从而导致Sim失败',\n", " '[0.3.0 beta] 文件跳转功能失效',\n", " '[0.3.0 beta] 例化中的[xx:xx]连线会导致后续颜色错误',\n", " '[0.3.0 beta]\"显示当前文件的netlist\"无法正确显示出网表',\n", " '[0.3.0 beta] Bitwidth of 1-bit signal is incorrectly recognized as \"Unknown\" in auto instantiation and auto document',\n", " '[0.3.3 beta] 含参数模型的例化存在问题以及拓展快捷键失效的问题',\n", " \"[0.3.2]数值悬停提示不支持'_'语法\"],\n", " [1,\n", " 2,\n", " 3,\n", " 5,\n", " 1,\n", " 5,\n", " 5,\n", " 2,\n", " 1,\n", " 1,\n", " 1,\n", " 3,\n", " 5,\n", " 1,\n", " 5,\n", " 1,\n", " 5,\n", " 1,\n", " 5,\n", " 5,\n", " 5,\n", " 5,\n", " 5,\n", " 1,\n", " 1,\n", " 2,\n", " 5,\n", " 5,\n", " 5,\n", " 1,\n", " 5,\n", " 4,\n", " 2,\n", " 2,\n", " 4,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 4,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 4,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 4,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", " 2])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "engine = PromptEngine('../config/story.yml')\n", "engine.merge_stories_from_yml('../config/github-issue.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": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(94, 768)" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "embedding = model.embed_documents(sentences)\n", "embedding = np.array(embedding)\n", "embedding.shape" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "tsne = TSNE(n_components=2)\n", "plots = tsne.fit_transform(embedding)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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4w1CouEkvLkwH3mT78fWVQXQFAWCUFMfaOuqAuRNvj+i86hQ+IraHpHEhEvw4P0TIUkynM6Tr6Bq8g5YY2343wf+gn2le/3eMzJ16lRkZmZi/Pjx+L//+z+cffbZSExMhNVqxbJly7BmzRqkpqaiU6dOmDNnDt566y3cfffd3sdfffXV+Omnn3DllVfiiiuuwD//+U9cfvnlWLlyJfr06YORI0di9uzZWL58Ofbv3+993HPPPYdx48ahtLQU//znP/H+++/D4XDgkUcegdPpxIIFCzBlyhRvReCzOp+NjxctxgsvTAVMJtxzz53IyX0badfdgMqT0jRnZz+I5557Ho899iiys7Mxf/58xMXF4ejRo/jjH/+I//73v5g5cyZycnKQkpKC1157za/vJxEQ/gnZ/CVcc8FQdNNDdbPb7bqu67rdbj/lvri4OP29997T4+LiWvXcEx59Uf9kySZ94QerGt0+WbJJf2z88359Te3atdOrqqr0e++995T77rvvPv3w4cO61Wr13nb99dfriqLonTp10gHo8+bN03/44QfdZDJ59ykuLta//vpr7/8FQdAdDoc+cuRI73ul67p+zz33ePcZOXKkruu6PmjQIO9tTz75pF5cXKwD0E0mk97tgkT9ovgk75ZwUbLucDj0rMwHvbfpuq7PfOttvdsFibrJZNKtVquu67qelpamA9BffPFFfevWrXVe59SpU3Vd1/UOHTo0+j619fPlFh6bJJt1a/vTdUk2h8XzcuPGrWVbU+fv+ltU9ojIshmX97saajPL/VRVRf/LB+Pvbz3vtwmsF198MWJiYvDll182eN/mzZvhdP7e27B69WqIooiEhAQcOnQIALBt2zbouu7d5+DBg9i6dav3/5qm4fDhw+jUqVOd59+yZUudxwDA999/X+e22scIgoCOHTvi0cceQe/eqfjDH86AIIiIjY1Bly6d6zxvSclOmEwmCIIAp9OJ48ePe5/n4osvxrp16+rsv2bNmha8UxTJAl0TRvG42QtAbRbNxRODKSoDEavVBlEUW5AASYMoSrBabTh+3D9fwqqqtq8w8XjqVgnWdb3B2wSh7hSgk/epDWTq31b7GE3T8PIrf8Ppp5+OF198CQf2H4Db7caHC+ZDluW6z6so0HUdmqY1emyiWtFeE4ZCX7QXTwy2qDxbOJ2VUFW1BWvuBaiqUm8O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P7/RY27ZsgU9e/asc5yTbdq0CQkJCdizZ88pW0PLACm8SGYzkgYOaNGKhuRBA6J2AmtK2m2nBCEnc1VVBiUpmD8YlRE0L68Q6WmT8OEHK+F2qxCEmjkhH36wEulpk5CXVxjU9lB4CGggcsEFF+CBBx7Arl27kJaWhrfffht///vfMWbMmAb3nzhxIioqKrzb/v37A9Iul6JiackeSELTL18SBCzZsRsupekfcF/UrpTJyspCt27dMGjQILz++uve+99//33ouo7c3FxcfPHFuP766/H444+f8jz79u3DN998g7lz59aMuy5Z0ugx//3vf+OXX37BokWLcPnll+P888/HLbfc4g1wpkyZgjFjxuCvf/0runfvjsTERIwcORLPP/+83143Gcdis0KQROjNBCK6pkKQRFhs1iC1LHTUJgXTtKbfo0AnBYsERUW7kJX1FuLOvRsJF41F3Ll3IyvrLfaEUKMCGogIgoBNmzbh6aefxnfffYfc3Fzk5uaesvS01tSpU9G+fXvv1rVr14C1LbdoM9yqCrul4R8Uu8UMt6piTtEWvx5X13X86U9/Qq9evbB161ZMnz4dEyZM8N5fWVmJIUOG4JJLLsG3336LF198EU8++WSDzzV//nz07NkTH3/8cZNDKB6PB9dddx0OHTqETz/9FN9//z2eeuop7xXy559/jptuugnXXXcdNmzYgLVr12L8+PHYt2+fX187GcNV6YSmqDA1sxzbJNSsonFVOoPUstDRUFKwhgQ6KVgkcbk8KC+v4MRUalZA54j8/PPP2L59e53biouLceuttza4v9vthtuPwyBNKdr/Cx4vKMSr6YPQ3mKGomlQNR2iYIIkCHCrKh4vKAxIUrMvv/wSSUl1i0+ZTL8PE61bt65O7pD699eaNWtWndU0Te1fWlqKESNGNNqmzz//HJ9//nmzbafwo7jd2LZiFXqmXYOmTgmiKGLL8kIoQfobDCWhkBSMKFoFtEdk9erVSEhIqHPbRRddFDJX2v/avB035v0HH27dAY+mQRBM8GgaPty6Azfm/Qf/2ry9+SchCgNrFi6GqiiNDrtYbFaoioK1CxcFt2EhIhSSghFFq4D2iEyfPh3ffPMNJk6ciAULFqB3797IyspCVlZWIA/rk40HfsHGJb9g3Kdfwm42w+F2+3VOCFEoKNu6HYumzcDwJ8chxmarySOi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Xbp0QWFhITZu3Ii7774buq4HuHXhy+PxYOPGjRg8eDAWL14MADCZTBg8eDDeeustg1sXPt58803cfPPNGDhwIH788UejmxNWvvzySyQnJ9e5bd68edixYwemTZsGTdMMaln4WL16NRISEurcdtFFF2Hfvn0GtSj8WK3WU75rqqpCECJjqqfh0VA0bV26dNF37typL1++XO/SpYt+1llneTej2xaqW0ZGhl5VVaWPGTNGT0xM1GfNmqUfOXJE79Spk+FtC4dt5syZ+tGjR/Urr7yyzvctJibG8LaF68ahGd+2lJQU3e126xMnTtS7deum33777fpvv/2mjxo1yvC2hcs2b948vayszLt8d/jw4fqhQ4f0l156yfC2+WEzvAFRtd15552NziExum2hvP3v//6v/uOPP+rV1dX62rVr9d69exvepnDZGnPnnXca3rZw3RiI+L7deOON+pYtW/Sqqip9+/btnKDv49auXTt9+vTp+o8//qg7nU599+7d+vPPP19nyD9cN9OJfxAREREFXWQMLhEREVFYYiBCREREhmEgQkRERIZhIEJERESGYSBCREREhmEgQkRERIZhIEJERESGYSBCREREhmEgQkRERIZhIEJERESGYSBCREREhmEgQkRERIb5fxEtE228BYovAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "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=engine.id2intent[label])\n", "plt.legend()" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
LogisticRegression()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "LogisticRegression()" ] }, "execution_count": 8, "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": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5])" ] }, "execution_count": 9, "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": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['../model/embedding_mapping.sklearn']" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import joblib\n", "joblib.dump(log_model, '../model/embedding_mapping.sklearn')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "log_model = joblib.load('../model/embedding_mapping.sklearn')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([5])" ] }, "execution_count": 12, "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": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
SVC()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "SVC()" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.svm import SVC\n", "\n", "svm = SVC()\n", "svm.fit(embedding, labels)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['../model/embedding_mapping.sklearn']" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# test_sentence = ['咖啡喝不了,喝了胃不舒服']\n", "# test_embedding = model.embed_documents(test_sentence)\n", "# svm.predict(test_embedding)\n", "# joblib.dump(log_model, '../model/embedding_mapping.sklearn')" ] } ], "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 }