Views
No views yet
vinai/phobert-base for Vietnamese news recommendation using contrastive learning on news categories.URL: Article URLTitle: Article titleSummary: Article summaryContents: Full article contentDate: Publication dateAuthor(s): Article author(s)Category: Article category (used as labels)Tags: Related tags1import torch
2from transformers import AutoTokenizer, AutoModelForSequenceClassification
3import faiss
4import numpy as np
5import pickle
6from sklearn.preprocessing import normalize
7from huggingface_hub import hf_hub_download
8
9# Load model and tokenizer
10model_name = "htNghiaaa/phobert-vietnamese-recommendation-1"
11tokenizer = AutoTokenizer.from_pretrained(model_name)
12model = AutoModelForSequenceClassification.from_pretrained(model_name)
13
14# Load FAISS index and metadata
15index_path = hf_hub_download(repo_id=model_name, filename="faiss_index.index")
16metadata_path = hf_hub_download(repo_id=model_name, filename="metadata.pkl")
17
18index = faiss.read_index(index_path)
19with open(metadata_path, "rb") as f:
20 metadata = pickle.load(f)
21
22# Function to get embeddings
23def get_embedding(text):
24 inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=256)
25 with torch.no_grad():
26 outputs = model.roberta(**inputs)
27 embedding = outputs.last_hidden_state.mean(dim=1).numpy()
28 return normalize(embedding, norm='l2').astype('float32')
29
30# Function to get recommendations
31def get_recommendations(query_text, top_k=5):
32 query_embedding = get_embedding(query_text)
33 similarities, indices = index.search(query_embedding, top_k)
34
35 results = []
36 for sim, idx in zip(similarities[0], indices[0]):
37 results.append({
38 'title': metadata['titles'][idx],
39 'summary': metadata['summaries'][idx],
40 'category': metadata['categories'][idx],
41 'tags': metadata['tags'][idx],
42 'url': metadata['urls'][idx],
43 'similarity': float(sim)
44 })
45 return results
46
47# Example
48recommendations = get_recommendations("Bóng đá Việt Nam")
49for rec in recommendations:
50 print(f"[{rec['category']}] {rec['title']} (sim: {rec['similarity']:.4f})")faiss_index.index: FAISS index for similarity searchembeddings.npy: Pre-computed embeddingsmetadata.pkl: Article metadata (urls, titles, summaries, categories, tags, authors, dates)label_encoder.pkl: Category label encoder