Sentence Similarity
sentence-transformers
Safetensors
Russian
Kazakh
legal
semantic-search
retrieval
faiss
fastapi
openai
Instructions to use irinaqqq/lexir with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use irinaqqq/lexir with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("irinaqqq/lexir") sentences = [ "Это счастливый человек", "Это счастливая собака", "Это очень счастливый человек", "Сегодня солнечный день" ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4] - Notebooks
- Google Colab
- Kaggle
File size: 2,758 Bytes
6a02b16 c6cece9 6a02b16 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | import json
from pathlib import Path
import numpy as np
import faiss
from sentence_transformers import SentenceTransformer
from data_io import load_clauses, write_jsonl
def build_one(model_name, out_dir, ru, kz, batch_size=64):
out_dir = Path(out_dir)
out_dir.mkdir(parents=True, exist_ok=True)
ru_texts = [x["text"] for x in ru]
kz_texts = [x["text"] for x in kz]
ru_meta = [{"pos": i, "id": ru[i]["id"], "lang": "ru", "meta": ru[i]["meta"], "text": ru[i]["text"]} for i in range(len(ru))]
kz_meta = [{"pos": i, "id": kz[i]["id"], "lang": "kz", "meta": kz[i]["meta"], "text": kz[i]["text"]} for i in range(len(kz))]
model = SentenceTransformer(model_name)
ru_emb = model.encode(ru_texts, batch_size=batch_size, convert_to_numpy=True, normalize_embeddings=True, show_progress_bar=True).astype(np.float32)
kz_emb = model.encode(kz_texts, batch_size=batch_size, convert_to_numpy=True, normalize_embeddings=True, show_progress_bar=True).astype(np.float32)
ru_index = faiss.IndexFlatIP(ru_emb.shape[1])
ru_index.add(ru_emb)
faiss.write_index(ru_index, str(out_dir / "ru.faiss"))
kz_index = faiss.IndexFlatIP(kz_emb.shape[1])
kz_index.add(kz_emb)
faiss.write_index(kz_index, str(out_dir / "kz.faiss"))
write_jsonl(str(out_dir / "ru_meta.jsonl"), ru_meta)
write_jsonl(str(out_dir / "kz_meta.jsonl"), kz_meta)
info = {
"model": model_name,
"ru_count": len(ru_texts),
"kz_count": len(kz_texts),
"ru_index": str(out_dir / "ru.faiss"),
"kz_index": str(out_dir / "kz.faiss"),
"ru_meta": str(out_dir / "ru_meta.jsonl"),
"kz_meta": str(out_dir / "kz_meta.jsonl"),
}
(out_dir / "index_info.json").write_text(json.dumps(info, ensure_ascii=False, indent=2), encoding="utf-8")
def main():
clauses_path = "data/clauses_constitution_ru_kz.jsonl"
ru, kz = load_clauses(clauses_path)
base_root = Path("artifacts/indexes")
base_root.mkdir(parents=True, exist_ok=True)
models = [
("mpnet_base", "paraphrase-multilingual-mpnet-base-v2"),
("labse", "sentence-transformers/LaBSE"),
]
finetuned_path = Path("artifacts/models/finetuned_mpnet")
if finetuned_path.exists():
models.append(("finetuned", str(finetuned_path)))
built = []
for alias, model_name in models:
out_dir = base_root / alias
build_one(model_name, out_dir, ru, kz, batch_size=64)
built.append({"alias": alias, "dir": str(out_dir), "model": model_name})
(base_root / "built_indexes.json").write_text(json.dumps(built, ensure_ascii=False, indent=2), encoding="utf-8")
if __name__ == "__main__":
main()
|