Spaces:
Running
Running
import streamlit as st | |
from transformers import pipeline, AutoTokenizer, AutoModelForMaskedLM | |
import torch | |
# تنظیمات صفحه | |
st.set_page_config(page_title="دستیار هوش مصنوعی (پر کردن ماسک)", layout="wide") | |
# تابع بارگذاری مدل و pipeline | |
def load_model_and_pipeline(): | |
# بارگذاری pipeline | |
pipe = pipeline("fill-mask", model="HooshvareLab/bert-fa-base-uncased") | |
# بارگذاری مدل و توکنایزر به صورت مستقیم | |
tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased") | |
model = AutoModelForMaskedLM.from_pretrained("HooshvareLab/bert-fa-base-uncased") | |
return pipe, tokenizer, model | |
pipe, tokenizer, model = load_model_and_pipeline() | |
# تابع پیشبینی با pipeline | |
def predict_with_pipeline(text): | |
results = pipe(text) | |
return [{"word": res["token_str"], "score": res["score"]} for res in results] | |
# تابع پیشبینی با مدل مستقیم | |
def predict_with_model(text): | |
inputs = tokenizer(text, return_tensors="pt") | |
mask_token_index = torch.where(inputs["input_ids"] == tokenizer.mask_token_id)[1] | |
# اجرای مدل | |
outputs = model(**inputs) | |
logits = outputs.logits | |
# پیدا کردن توکنهای برتر | |
mask_token_logits = logits[0, mask_token_index, :] | |
top_tokens = torch.topk(mask_token_logits, 5, dim=1).indices[0].tolist() | |
results = [{"word": tokenizer.decode([token])} for token in top_tokens] | |
return results | |
# رابط کاربری | |
def main(): | |
st.title("دستیار هوش مصنوعی (پر کردن ماسک)") | |
# ورودی کاربر | |
st.subheader("ورودی متن:") | |
text = st.text_input( | |
"متن خود را وارد کنید (از [MASK] برای نشان دادن کلمه حذف شده استفاده کنید):", | |
value="ما در هوشواره معتقدیم [MASK] دانش و آگاهی میتواند جامعه را تغییر دهد.", | |
) | |
if st.button("پیشبینی با pipeline"): | |
if "[MASK]" not in text: | |
st.error("لطفاً یک متن شامل [MASK] وارد کنید.") | |
else: | |
st.subheader("نتایج پیشبینی با pipeline:") | |
predictions = predict_with_pipeline(text) | |
for pred in predictions: | |
st.write(f"کلمه: {pred['word']} - احتمال: {pred['score']:.2f}") | |
if st.button("پیشبینی با مدل مستقیم"): | |
if "[MASK]" not in text: | |
st.error("لطفاً یک متن شامل [MASK] وارد کنید.") | |
else: | |
st.subheader("نتایج پیشبینی با مدل مستقیم:") | |
predictions = predict_with_model(text) | |
for pred in predictions: | |
st.write(f"کلمه: {pred['word']}") | |
if __name__ == "__main__": | |
main() | |