Files
assist/src/utils/__pycache__/semantic_similarity.cpython-311.pyc

133 lines
17 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00>i<>3<00> <00><><00>dZddlZddlZddlZddlmZmZmZddl m
Z
ej e <0C><00>Z Gd<05>d<06><00>Zdadded efd
<EFBFBD>Zdd ed ed ed efd<0E>Zdeeeefd eefd<10>ZdS)u|
语义相似度计算服务
使用LLM API进行更准确的语义相似度计算提高理解力并节约服务端资源
<EFBFBD>N)<03>List<73>Tuple<6C>Optional)<01>SentenceTransformerc <00>N<00>eZdZdZddefd<04>Zd<05>Zd<06>Zddeded ed
e fd <0B>Z
deded
e fd <0C>Z d ed
e fd<0E>Z deded
e fd<0F>Z deded
e fd<10>Zdejdejd
e fd<13>Zdeeeefd
ee fd<15>Zdeeeefd
ee fd<16>Zdedede d
efd<18>Zd
efd<19>ZdS)<1C>SemanticSimilarityCalculatoru(语义相似度计算器 - 使用LLM APIT<49>use_llmc<00><><00>||_d|_d|_|r|<00><00><00>dS|<00><00><00>dS)u=
初始化语义相似度计算器
Args:
use_llm: 是否使用LLM API计算相似度默认True推荐
- True: 使用LLM API理解力更强无需加载本地模型
- False: 使用本地模型需要下载HuggingFace模型
N)r <00>model<65>
llm_client<EFBFBD>_init_llm_client<6E> _load_model)<02>selfr s <20>6d:\code\tsp-assistant\src\utils\semantic_similarity.py<70>__init__z%SemanticSimilarityCalculator.__init__sQ<00><00><1F><04> <0C><19><04>
<EFBFBD><1E><04><0F> <12> <1F> <10> !<21> !<21> #<23> #<23> #<23> #<23> #<23> <10> <1C> <1C> <1E> <1E> <1E> <1E> <1E>c<00><00> ddlm}|<01><00>|_t<00>d<03><00>dS#t
$rJ}t<00>d|<02><00><02><00>d|_d|_|<00><00><00>Yd}~dSd}~wwxYw)u初始化LLM客户端<E688B7>)<01>
QwenClientuCLLM客户端初始化成功将使用LLM API计算语义相似度u初始化LLM客户端失败: NF) <09>core.llm_clientrr <00>logger<65>info<66> Exception<6F>errorr r)rr<00>es rr z-SemanticSimilarityCalculator._init_llm_client&s<><00><00> <1F> 4<> 4<> 4<> 4<> 4<> 4<>(<28>j<EFBFBD>l<EFBFBD>l<EFBFBD>D<EFBFBD>O<EFBFBD> <12>K<EFBFBD>K<EFBFBD>]<5D> ^<5E> ^<5E> ^<5E> ^<5E> ^<5E><><18> <1F> <1F> <1F> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D>"<22>D<EFBFBD>O<EFBFBD> <20>D<EFBFBD>L<EFBFBD> <10> <1C> <1C> <1E> <1E> <1E> <1E> <1E> <1E> <1E> <1E> <1E><><EFBFBD><EFBFBD><EFBFBD>  <1F><><EFBFBD>s<00>/3<00>
B<03>?B<03>Bc<00><00> t<00>d<01><00>td<02><00>|_t<00>d<03><00>dS#t$r/}t<00>d|<01><00><02><00>d|_Yd}~dSd}~wwxYw)u7加载预训练模型仅在use_llm=False时使用u9正在加载本地语义相似度模型: all-MiniLM-L6-v2zall-MiniLM-L6-v2u'本地语义相似度模型加载成功u)加载本地语义相似度模型失败: N)rrrr rr)rrs rrz(SemanticSimilarityCalculator._load_model3s<><00><00> <1E> <12>K<EFBFBD>K<EFBFBD>T<> U<> U<> U<>,<2C>-?<3F>@<40>@<40>D<EFBFBD>J<EFBFBD> <12>K<EFBFBD>K<EFBFBD>A<> B<> B<> B<> B<> B<><42><18> <1E> <1E> <1E> <12>L<EFBFBD>L<EFBFBD>H<>Q<EFBFBD>H<>H<> I<> I<> I<><1D>D<EFBFBD>J<EFBFBD>J<EFBFBD>J<EFBFBD>J<EFBFBD>J<EFBFBD>J<EFBFBD>J<EFBFBD><4A><EFBFBD><EFBFBD><EFBFBD> <1E><><EFBFBD>s<00>AA <00>
B<03>$B<03>B<03>text1<74>text2<74> fast_mode<64>returnc<00><><00>|r|sdS |jr|jr|<00>||<02><00>S|j<00>]|rE|<00>||<02><00>}|dks|dkr|S|<00>||<02><00>}|dz|dzzS|<00>||<02><00>S|<00>||<02><00>S#t $r=}t<00>d|<06><00><02><00>|<00>||<02><00>cYd}~Sd}~wwxYw)u0
计算两个文本的语义相似度
Args:
text1: 第一个文本
text2: 第二个文本
fast_mode: 是否使用快速模式(仅在使用本地模型时有效)
Returns:
相似度分数 (0-1之间)
<20>Ng<4E><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g333333<33>?gffffff<66>?u计算语义相似度失败: ) r r <00>_calculate_llm_similarityr <00>_calculate_tfidf_similarity<74>_calculate_semantic_similarityrrr)rrrr<00> tfidf_sim<69> semantic_simrs r<00>calculate_similarityz1SemanticSimilarityCalculator.calculate_similarity=sD<00><00><15> <17>E<EFBFBD> <17><16>3<EFBFBD> B<01><13>|<7C> D<01><04><0F> D<01><1B>5<>5<>e<EFBFBD>U<EFBFBD>C<>C<>C<><14>z<EFBFBD>%<25><1C> M<01> $<24> @<40> @<40><15><05> N<> N<>I<EFBFBD> <20>C<EFBFBD>'<27>'<27>9<EFBFBD><03>+;<3B>+;<3B>(<28>(<28>#'<27>#F<>#F<>u<EFBFBD>e<EFBFBD>#T<>#T<>L<EFBFBD>%<25><03>O<EFBFBD>l<EFBFBD>S<EFBFBD>.@<40>@<40>A<><1F>><3E>><3E>u<EFBFBD>e<EFBFBD>L<>L<>L<><1B>7<>7<><05>u<EFBFBD>E<>E<>E<><45><18> B<01> B<01> B<01> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><17>3<>3<>E<EFBFBD>5<EFBFBD>A<>A<> A<> A<> A<> A<> A<> A<><41><EFBFBD><EFBFBD><EFBFBD> B<01><><EFBFBD>s4<00>#B&<00>,B&<00> B&<00>:B&<00>B&<00>&
C-<03>02C(<03>"C-<03>(C-c<00>f<00> d|<01>d|<02>d<03>}ddd<06>d|d<06>g}|j<00>|dd <09>
<EFBFBD><00>}d |vr9t<00>d |d <00><00><02><00>|<00>||<02><00>S|<05>d ig<01><00>d<00>di<00><00><00>dd<11><00>}|<00>|<06><00>}t<00>d|d<13><04><02><00>|S#t$r=}t<00>d|<08><00><02><00>|<00>||<02><00>cYd}~Sd}~wwxYw)u"使用LLM API计算语义相似度u请比较以下两个文本的语义相似度并给出0-1之间的分数保留2位小数其中
- 1.0 表示完全相同
- 0.8-0.9 表示非常相似
- 0.6-0.7 表示较为相似
- 0.4-0.5 表示部分相似
- 0.0-0.3 表示差异很大
文本1: u
文本2: ua
请只返回0-1之间的数字保留2位小数不要包含其他文字。例如0.85<EFBFBD>systemuc你是一个专业的文本相似度评估专家,请准确评估两个文本的语义相似度。)<02>role<6C>content<6E>userg<72><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>2)<03>messages<65> temperature<72>
max_tokensruLLM API调用失败: <20>choicesr<00>messager,<00>uLLM计算语义相似度: <20>.4fu LLM语义相似度计算失败: N) r <00>chat_completionrrr$<00>get<65>!_extract_similarity_from_response<73>debugr) rrr<00>promptr/<00>result<6C>response_content<6E>
similarityrs rr#z6SemanticSimilarityCalculator._calculate_llm_similarityds<><00><00>) B<01> c<01> <10> c<01> c<01> <10> c<01> c<01> c<01>F<EFBFBD>"<22>/T<02>U<02>U<02><1F>F<EFBFBD>3<>3<><0E>H<EFBFBD>
<1A>_<EFBFBD>4<>4<>!<21><1F><1D>5<><0E><0E>F<EFBFBD> <17>&<26> <20> <20><16> <0C> <0C>F<>V<EFBFBD>G<EFBFBD>_<EFBFBD>F<>F<>G<>G<>G<><1B>7<>7<><05>u<EFBFBD>E<>E<>E<> &<26>z<EFBFBD>z<EFBFBD>)<29>b<EFBFBD>T<EFBFBD>:<3A>:<3A>1<EFBFBD>=<3D>A<>A<>)<29>R<EFBFBD>P<>P<>T<>T<>U^<5E>`b<>c<>c<> <1C><1D>?<3F>?<3F>@P<>Q<>Q<>J<EFBFBD> <12>L<EFBFBD>L<EFBFBD>F<>j<EFBFBD>F<>F<>F<> G<> G<> G<><1D> <1D><><18> B<01> B<01> B<01> <12>L<EFBFBD>L<EFBFBD>?<3F>A<EFBFBD>?<3F>?<3F> @<40> @<40> @<40><17>3<>3<>E<EFBFBD>5<EFBFBD>A<>A<> A<> A<> A<> A<> A<> A<><41><EFBFBD><EFBFBD><EFBFBD> B<01><><EFBFBD>s%<00>A,C)<00>/A9C)<00>)
D0<03>32D+<03>%D0<03>+D0<03>responsec<00>v<00> gd<01>}|D][}tj||<01><00>}|rBt|d<00><00>}|dkr|dz }tdt d|<05><00><00><00>}|cS<00>\t
<00>d|<01><00><02><00>dS#t$r+}t
<00>d |<06>d
|<01><00><04><00>Yd }~dSd }~wwxYw) u$从LLM响应中提取相似度分数)z(\d+\.\d{1,2})z
(\d+\.\d+)z(\d+)r<00>gY@r"<00><00>?u)无法从响应中提取相似度分数: g<00>?u提取相似度分数失败: u
, 响应: N) <09>re<72>findall<6C>float<61>max<61>minr<00>warningrr)rr><00>patterns<6E>pattern<72>matches<65>valuers rr8z>SemanticSimilarityCalculator._extract_similarity_from_response<73>s<><00><00> <17><0E><0E><0E>H<EFBFBD> $<24> !<21> !<21><07><1C>*<2A>W<EFBFBD>h<EFBFBD>7<>7<><07><1A>!<21>!<21>'<27>!<21>*<2A>-<2D>-<2D>E<EFBFBD><1C>q<EFBFBD>y<EFBFBD>y<EFBFBD> %<25><05> <0A><05><1F><03>S<EFBFBD><13>e<EFBFBD>_<EFBFBD>_<EFBFBD>5<>5<>E<EFBFBD> <20>L<EFBFBD>L<EFBFBD>L<EFBFBD>!<21> <13>N<EFBFBD>N<EFBFBD>Q<>x<EFBFBD>Q<>Q<> R<> R<> R<><16>3<EFBFBD><33><18> <17> <17> <17> <12>L<EFBFBD>L<EFBFBD>P<><11>P<>P<>h<EFBFBD>P<>P<> Q<> Q<> Q<><16>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD> <17><><EFBFBD>s<00>A B<00>#B<00>
B8<03> B3<03>3B8c<00><><00> |j<00>||g<02><00>}|<00>|d|d<00><00>}tdt d|<04><00><00><00>}t
<00>d|d<06><04><02><00>t|<04><00>S#t$r=}t
<00> d|<05><00><02><00>|<00>
||<02><00>cYd}~Sd}~wwxYw) u0使用sentence-transformers计算语义相似度rr@r"rAu语义相似度计算: r5u语义相似度计算失败: N) r <00>encode<64>_cosine_similarityrErFrr9rDrrr$)rrr<00>
embeddingsr=rs rr%z;SemanticSimilarityCalculator._calculate_semantic_similarity<74>s<><00><00> B<01><1D><1A>*<2A>*<2A>E<EFBFBD>5<EFBFBD>><3E>:<3A>:<3A>J<EFBFBD><1E>0<>0<><1A>A<EFBFBD><1D>
<EFBFBD>1<EFBFBD> <0A>N<>N<>J<EFBFBD><1D>S<EFBFBD>#<23>c<EFBFBD>:<3A>"6<>"6<>7<>7<>J<EFBFBD> <12>L<EFBFBD>L<EFBFBD>C<>:<3A>C<>C<>C<> D<> D<> D<><18><1A>$<24>$<24> $<24><><18> B<01> B<01> B<01> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><17>3<>3<>E<EFBFBD>5<EFBFBD>A<>A<> A<> A<> A<> A<> A<> A<><41><EFBFBD><EFBFBD><EFBFBD> B<01><><EFBFBD>s<00>BB <00>
C<03>2C <03>C<03> Cc<00>x<00> ddlm}ddlm}|dd<05><06><00>}|<05>||g<02><00>}||dd<07>|dd<08><00><00>dd}t
<00>d |d
<EFBFBD><04><02><00>t|<07><00>S#t$r(}t
<00> d |<08><00><02><00>Yd}~d Sd}~wwxYw) u-使用TF-IDF计算相似度回退方法r)<01>TfidfVectorizer)<01>cosine_similarityi<79>N)<02> max_features<65>
stop_wordsr@ruTF-IDF相似度计算: r5uTF-IDF相似度计算失败: r")
<EFBFBD>sklearn.feature_extraction.textrQ<00>sklearn.metrics.pairwiserR<00> fit_transformrr9rDrr) rrrrQrR<00>
vectorizer<EFBFBD>vectorsr=rs rr$z8SemanticSimilarityCalculator._calculate_tfidf_similarity<74>s<><00><00> <17> G<> G<> G<> G<> G<> G<> B<> B<> B<> B<> B<> B<>(<28><1F>d<EFBFBD>t<EFBFBD>L<>L<>L<>J<EFBFBD> <20>.<2E>.<2E><05>u<EFBFBD>~<7E>><3E>><3E>G<EFBFBD>*<2A>*<2A>7<EFBFBD>1<EFBFBD>Q<EFBFBD>3<EFBFBD><<3C><17><11>1<EFBFBD><13><1C>F<>F<>q<EFBFBD>I<>!<21>L<>J<EFBFBD> <12>L<EFBFBD>L<EFBFBD>C<>:<3A>C<>C<>C<> D<> D<> D<><18><1A>$<24>$<24> $<24><><18> <17> <17> <17> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><16>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD> <17><><EFBFBD>s<00>BB<00>
B9<03>B4<03>4B9<03>vec1<63>vec2c<00>^<00> tj||<02><00>}tj<00>|<01><00>}tj<00>|<02><00>}|dks|dkrdS|||zz }t |<06><00>S#t
$r(}t <00>d|<07><00><02><00>Yd}~dSd}~wwxYw)u计算余弦相似度rr"u余弦相似度计算失败: N)<08>np<6E>dot<6F>linalg<6C>normrDrrr)rrZr[<00> dot_product<63>norm1<6D>norm2r=rs rrNz/SemanticSimilarityCalculator._cosine_similarity<74>s<><00><00> <17><1C>&<26><14>t<EFBFBD>,<2C>,<2C>K<EFBFBD><17>I<EFBFBD>N<EFBFBD>N<EFBFBD>4<EFBFBD>(<28>(<28>E<EFBFBD><16>I<EFBFBD>N<EFBFBD>N<EFBFBD>4<EFBFBD>(<28>(<28>E<EFBFBD><15><01>z<EFBFBD>z<EFBFBD>U<EFBFBD>a<EFBFBD>Z<EFBFBD>Z<EFBFBD><1A>s<EFBFBD>%<25><05><05> <0A>6<>J<EFBFBD><18><1A>$<24>$<24> $<24><><18> <17> <17> <17> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><16>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD> <17><><EFBFBD>s<00>AA:<00>#A:<00>:
B,<03>B'<03>'B,<03>
text_pairsc<00>(<00><00>|sgS <00>jr<15>jr<0E>fd<01>|D<00><00>S<00>j<00><15><00>|<01><00>S<00>fd<03>|D<00><00>S#t$r:}t
<00>d|<02><00><02><00>dgt|<01><00>zcYd}~Sd}~wwxYw)u<>
批量计算相似度
Args:
text_pairs: 文本对列表 [(text1, text2), ...]
Returns:
相似度分数列表
c<00>B<00><01>g|]\}}<02><03>||<02><00><00><02>S<00>)r#<00><04>.0<EFBFBD>t1<74>t2rs <20>r<00>
<listcomp>zKSemanticSimilarityCalculator.batch_calculate_similarity.<locals>.<listcomp><3E>s-<00><><00>X<>X<>X<>6<EFBFBD>2<EFBFBD>r<EFBFBD><04>6<>6<>r<EFBFBD>2<EFBFBD>><3E>><3E>X<>X<>XrNc<00>B<00><01>g|]\}}<02><03>||<02><00><00><02>Srg<00>r$rhs <20>rrlzKSemanticSimilarityCalculator.batch_calculate_similarity.<locals>.<listcomp><3E>s-<00><><00>Z<>Z<>Z<>V<EFBFBD>R<EFBFBD><12><04>8<>8<><12>R<EFBFBD>@<40>@<40>Z<>Z<>Zru批量相似度计算失败: r")r r r <00>_batch_semantic_similarityrrr<00>len)rrdrs` r<00>batch_calculate_similarityz7SemanticSimilarityCalculator.batch_calculate_similarity<74>s<><00><><00><1A> <16><15>I<EFBFBD> +<2B><13>|<7C> Y<01><04><0F> Y<01>X<>X<>X<>X<>Z<EFBFBD>X<>X<>X<>X<><14>z<EFBFBD>%<25><1B>6<>6<>z<EFBFBD>B<>B<>B<>Z<>Z<>Z<>Z<>z<EFBFBD>Z<>Z<>Z<>Z<><5A><18> +<2B> +<2B> +<2B> <12>L<EFBFBD>L<EFBFBD><<3C><11><<3C><<3C> =<3D> =<3D> =<3D><17>5<EFBFBD>3<EFBFBD>z<EFBFBD>?<3F>?<3F>*<2A> *<2A> *<2A> *<2A> *<2A> *<2A> *<2A><><EFBFBD><EFBFBD><EFBFBD> +<2B><><EFBFBD>s'<00>A <00>A <00> A <00>
B<03>/B <03>B<03> Bc<00><><00><00> g}|D]\}}|<02>||g<02><00><00><1D>j<00>|<02><00>}g}tdt |<05><00>d<02><00>D]I}<07><00>||||dz<00><00>}|<06>t|<08><00><00><00><00>J|S#t$r5} t<00>
d| <09><00><02><00><00>fd<05>|D<00><00>cYd} ~ Sd} ~ wwxYw)u批量计算语义相似度rrr@u#批量语义相似度计算失败: c<00>B<00><01>g|]\}}<02><03>||<02><00><00><02>Srgrnrhs <20>rrlzKSemanticSimilarityCalculator._batch_semantic_similarity.<locals>.<listcomp>s-<00><><00>V<>V<>V<><16><12>R<EFBFBD>D<EFBFBD>4<>4<>R<EFBFBD><12><<3C><<3C>V<>V<>VrN) <0B>extendr rM<00>rangerprN<00>appendrDrrr)
rrd<00> all_textsrrrO<00> similarities<65>ir=rs
` rroz7SemanticSimilarityCalculator._batch_semantic_similaritys)<00><><00> W<01><1A>I<EFBFBD> *<2A> 1<> 1<> <0C><05>u<EFBFBD><19> <20> <20>%<25><15><1E>0<>0<>0<>0<><1E><1A>*<2A>*<2A>9<EFBFBD>5<>5<>J<EFBFBD><1E>L<EFBFBD><1A>1<EFBFBD>c<EFBFBD>*<2A>o<EFBFBD>o<EFBFBD>q<EFBFBD>1<>1<> 7<> 7<><01>!<21>4<>4<>Z<EFBFBD><01>]<5D>J<EFBFBD>q<EFBFBD>QR<51>s<EFBFBD>O<EFBFBD>T<>T<>
<EFBFBD><1C>#<23>#<23>E<EFBFBD>*<2A>$5<>$5<>6<>6<>6<>6<><1F> <1F><><18> W<01> W<01> W<01> <12>L<EFBFBD>L<EFBFBD>B<>q<EFBFBD>B<>B<> C<> C<> C<>V<>V<>V<>V<>:<3A>V<>V<>V<> V<> V<> V<> V<> V<> V<><56><EFBFBD><EFBFBD><EFBFBD> W<01><><EFBFBD>s<00>B&B*<00>*
C)<03>4*C$<03>C)<03>$C)r=c<00>F<00>|dkrdS|dkrdS|dkrdS|dkrdSd S)
u<EFBFBD>
获取相似度解释
Args:
text1: 第一个文本
text2: 第二个文本
similarity: 相似度分数
Returns:
相似度解释文本
gffffff<66>?u'语义高度相似建议自动审批g<E689B9><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?u'语义较为相似建议人工审核g333333<33>?u'语义部分相似需要人工判断g<E696AD><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?u*语义相似度较低建议重新生成u'语义差异较大建议重新生成rg)rrrr=s r<00>get_similarity_explanationz7SemanticSimilarityCalculator.get_similarity_explanationsN<00><00> <16><14> <1D> <1D><<3C><<3C> <17>3<EFBFBD> <1E> <1E><<3C><<3C> <17>3<EFBFBD> <1E> <1E><<3C><<3C> <17>3<EFBFBD> <1E> <1E>?<3F>?<3F><<3C><rc<00>4<00>|jr |jduS|jduS)u0检查模型是否可用LLM或本地模型N)r r r )rs r<00>is_model_availablez/SemanticSimilarityCalculator.is_model_available2s&<00><00> <0F><<3C> *<2A><17>?<3F>$<24>.<2E> .<2E><17>:<3A>T<EFBFBD>)<29> )rN<>T)<18>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>boolrr r<00>strrDr(r#r8r%r$r]<00>ndarrayrNrrrqror{r}rgrrrrs+<00><00><00><00><00><00>2<>2<><1F><1F><04><1F><1F><1F><1F>$ <1F> <1F> <1F><1E><1E><1E>%B<01>%B<01>#<23>%B<01>c<EFBFBD>%B<01>d<EFBFBD>%B<01>V[<5B>%B<01>%B<01>%B<01>%B<01>N+B<01>s<EFBFBD>+B<01>3<EFBFBD>+B<01>5<EFBFBD>+B<01>+B<01>+B<01>+B<01>Z<17>#<23><17>%<25><17><17><17><17>:B<01>C<EFBFBD>B<01><03>B<01><05>B<01>B<01>B<01>B<01>&<17><13><17>S<EFBFBD><17>U<EFBFBD><17><17><17><17>"<17>r<EFBFBD>z<EFBFBD><17><12><1A><17><05><17><17><17><17>.+<2B>T<EFBFBD>%<25><03>S<EFBFBD><08>/<2F>5J<35>+<2B>t<EFBFBD>TY<54>{<7B>+<2B>+<2B>+<2B>+<2B>6W<01>T<EFBFBD>%<25><03>S<EFBFBD><08>/<2F>5J<35>W<01>t<EFBFBD>TY<54>{<7B>W<01>W<01>W<01>W<01>.=<3D><03>=<3D>C<EFBFBD>=<3D>U<EFBFBD>=<3D>WZ<57>=<3D>=<3D>=<3D>=<3D>.*<2A>D<EFBFBD>*<2A>*<2A>*<2A>*<2A>*<2A>*rrTr r c<00>><00>t<00>t|<00><02><00>atS)uv获取全局相似度计算器实例
Args:
use_llm: 是否使用LLM API默认True推荐
N<>r )<02>_similarity_calculatorrr<>s r<00>get_similarity_calculatorr<72><s!<00><00><1E>%<25>!=<3D>g<EFBFBD>!N<>!N<>!N<><1E> !<21>!rrrrc<00>L<00>t<00><00>}|<03>|||<02><00>S)u<>
计算语义相似度的便捷函数
Args:
text1: 第一个文本
text2: 第二个文本
fast_mode: 是否使用快速模式
Returns:
相似度分数 (0-1之间)
)r<>r()rrr<00>
calculators r<00>calculate_semantic_similarityr<79>Gs'<00><00>+<2B>,<2C>,<2C>J<EFBFBD> <15> *<2A> *<2A>5<EFBFBD>%<25><19> C<> C<>Crrdc<00>H<00>t<00><00>}|<01>|<00><00>S)u<>
批量计算语义相似度的便捷函数
Args:
text_pairs: 文本对列表
Returns:
相似度分数列表
)r<>rq)rdr<>s r<00>#batch_calculate_semantic_similarityr<79>Vs#<00><00>+<2B>,<2C>,<2C>J<EFBFBD> <15> 0<> 0<><1A> <<3C> <<3C><rr~)r<><00>logging<6E>numpyr]rB<00>typingrrr<00>sentence_transformersr<00> getLoggerrrrr<>r<>r<>r<>rDr<>r<>rgrr<00><module>r<>sO<00><01><04><04>
<0F><0E><0E><0E><12><12><12><12> <09> <09> <09> <09>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28>5<>5<>5<>5<>5<>5<> <1A><17> <1A>8<EFBFBD> $<24> $<24><06>f*<2A>f*<2A>f*<2A>f*<2A>f*<2A>f*<2A>f*<2A>f*<2A>R <1E><16> "<22> "<22>t<EFBFBD> "<22>7S<37> "<22> "<22> "<22> "<22> D<01> D<01><13> D<01>S<EFBFBD> D<01>T<EFBFBD> D<01>UZ<55> D<01> D<01> D<01> D<01> =<3D>D<EFBFBD><15>s<EFBFBD>C<EFBFBD>x<EFBFBD><1F>4I<34> =<3D>d<EFBFBD>SX<53>k<EFBFBD> =<3D> =<3D> =<3D> =<3D> =<3D> =r