<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Meryeme ramdi</title>
    <description>The latest articles on DEV Community by Meryeme ramdi (@meryyy).</description>
    <link>https://dev.to/meryyy</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4019714%2Fe737d0b3-5534-4339-ab05-3099bd76a71d.png</url>
      <title>DEV Community: Meryeme ramdi</title>
      <link>https://dev.to/meryyy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/meryyy"/>
    <language>en</language>
    <item>
      <title>The day I asked three LLM agents to rewrite legacy Java for me — and what actually happened</title>
      <dc:creator>Meryeme ramdi</dc:creator>
      <pubDate>Thu, 20 Aug 2026 12:56:22 +0000</pubDate>
      <link>https://dev.to/meryyy/the-day-i-asked-three-llm-agents-to-rewrite-legacy-java-for-me-and-what-actually-happened-2jda</link>
      <guid>https://dev.to/meryyy/the-day-i-asked-three-llm-agents-to-rewrite-legacy-java-for-me-and-what-actually-happened-2jda</guid>
      <description>&lt;h2&gt;
  
  
  1. The question that started everything
&lt;/h2&gt;

&lt;p&gt;Three weeks into my internship, my supervisor sat down across from me and asked, very casually:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"OK your NLP pipeline extracts intentions and rules from legacy Java. Nice. &lt;strong&gt;And then what?&lt;/strong&gt;"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I looked at him. I looked at my laptop. I looked back at him.&lt;/p&gt;

&lt;p&gt;The whole project — Pulsar Modernizer — was supposed to eventually turn legacy Java into modern Spring Boot code. My part was the "understand the old code" part. F1 = 0.857 on the annotated corpus, a shiny React UI, everything humming in Docker.&lt;/p&gt;

&lt;p&gt;But the "and then?" was doing a lot of work in that sentence.&lt;/p&gt;

&lt;p&gt;That evening I wrote in my notes: &lt;em&gt;"Nobody has actually tried the generation part. Everyone assumes it'll be easy because LLMs. That is very obviously wrong."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I decided to try.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Why "just prompt an LLM to rewrite it" doesn't work
&lt;/h2&gt;

&lt;p&gt;The naive move — feed the old code and the extracted rules to an LLM and say "please modernize this" — has three problems and I hit all of them in the first hour:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The model hallucinates.&lt;/strong&gt; It happily invents helper classes that don't exist and calls methods with the wrong signature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You have no criterion for stopping.&lt;/strong&gt; The model tells you "it's done ". OK. Is it? By what test?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You have no criterion for equivalence.&lt;/strong&gt; Even if it compiles, how do you know the new code actually does what the old one did?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I needed something more constrained than "prompt it and pray".&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The setup — a chain, not a monolith
&lt;/h2&gt;

&lt;p&gt;I ended up building three specialized agents in sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IntentCard + RuleCards
        │
        ▼
[APIDesigner] ──► JSON contract (class, methods, DTOs, throws)
        │
        ├───────────────┐
        ▼               ▼
[CodeGenerator]    [TestGenerator]
        │               │
        ▼               ▼
     .java          *Test.java
        │               │
        └────► verifier (mvn test)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key insight: &lt;strong&gt;each rule extracted from the legacy code should become a test that the generated code has to pass.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This flips the whole thing. I don't trust the LLM. I trust &lt;code&gt;javac&lt;/code&gt; and JUnit.&lt;/p&gt;

&lt;p&gt;I did all of this on a local model — Qwen 2.5 Coder 3B via Ollama. No cloud APIs, no data leaving my Mac. On a 3B model, the constraint is fair: if the pipeline needs GPT-4-level intelligence to hold together, it's not going to fly in a bank in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The three cracks I never expected
&lt;/h2&gt;

&lt;p&gt;Here's where it got interesting.&lt;/p&gt;

&lt;p&gt;I hand-wrote the JUnit test-oracles for four rules from my banking corpus. Then I asked the LLM to generate the code. Baseline result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2 out of 3 oracles green&lt;/strong&gt; with a "raw" prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 out of 3&lt;/strong&gt; with a "clarified" prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The difference between the two prompts was &lt;strong&gt;three conventions I added at the top&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;null&lt;/code&gt; inputs are always rejected (never silently ignored)&lt;/li&gt;
&lt;li&gt;"cannot exceed N" means &lt;code&gt;N&lt;/code&gt; is accepted, &lt;code&gt;N + ε&lt;/code&gt; is rejected&lt;/li&gt;
&lt;li&gt;Currency/country lists are case-sensitive by default&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Every failure I observed traced back to one of these three assumptions being different in my head vs the LLM's head.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Which means: &lt;strong&gt;the three cracks were in my own annotations, not in the model.&lt;/strong&gt; My RuleCards were technically valid English sentences that a human reader would interpret one way, and a language model would interpret the other way. Nobody had written down the tiebreaker.&lt;/p&gt;

&lt;p&gt;That was the aha moment of the whole internship. Not "LLMs are amazing". Not "LLMs are terrible". Just: &lt;em&gt;your dataset has hidden ambiguities, and a fluent model surfaces them by making the opposite choice from what you meant.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Markov-1 pathological fixed point
&lt;/h2&gt;

&lt;p&gt;I got greedy. I built a repair loop: if the generated code doesn't compile, feed the compiler error back into the prompt and ask the model to fix it. Up to 5 iterations.&lt;/p&gt;

&lt;p&gt;Round 1: on a simple case (&lt;code&gt;DevisePermise&lt;/code&gt; — accepted currencies), the 3B model produced code that treated &lt;code&gt;null&lt;/code&gt; as &lt;code&gt;.toUpperCase()&lt;/code&gt; and crashed at runtime. I fed the error back. Round 2: fixed. &lt;strong&gt;2 iterations, converged.&lt;/strong&gt; Beautiful.&lt;/p&gt;

&lt;p&gt;Then I threw a harder rule at it: &lt;code&gt;LimiteVelociteTransactions&lt;/code&gt; — count more than 20 transactions in a sliding hour window, add +30 to the fraud score.&lt;/p&gt;

&lt;p&gt;Round 1: &lt;code&gt;if (nowTimestamp == null)&lt;/code&gt; — but &lt;code&gt;nowTimestamp&lt;/code&gt; is a Java &lt;code&gt;long&lt;/code&gt; primitive. &lt;code&gt;long&lt;/code&gt; can't be &lt;code&gt;null&lt;/code&gt;. &lt;code&gt;javac&lt;/code&gt; refused. I fed the error back.&lt;/p&gt;

&lt;p&gt;Round 2: same code. Same error.&lt;br&gt;
Round 3: same. Same.&lt;br&gt;
Rounds 4, 5: exactly the same generated code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The loop had converged — on broken code.&lt;/strong&gt; The 3B model, presented with a clear javac message, could not figure out that &lt;code&gt;long&lt;/code&gt; isn't &lt;code&gt;Long&lt;/code&gt;. And because my repair prompt was Markov-1 (only the previous attempt), it kept producing the same fixed point.&lt;/p&gt;

&lt;p&gt;The takeaway: &lt;em&gt;the fact that a repair loop "converges" tells you nothing about whether it converges on something correct.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6. What I actually shipped
&lt;/h2&gt;

&lt;p&gt;Full disclosure — this isn't a production system. It's a slice, on 4 rules, in a language (Java) that has parsers everywhere, with a corpus I annotated myself. The results are directional, not statistical.&lt;/p&gt;

&lt;p&gt;But the plumbing works end-to-end. A user pastes a Git URL in the interface. The system clones, extracts intentions with the NLP pipeline, persists them in PostgreSQL as a Cognitive Knowledge Graph, and — from a single click — chains the three agents to produce a downloadable zip of modern Spring Boot code. On Spring PetClinic (30 files), the loop currently produces four working Java classes with tests in about 10 minutes.&lt;/p&gt;

&lt;p&gt;You can compile the zip. You can read the tests. You can also see, in the output, that the model sometimes invents helper types the contract never mentioned. That's fine. That's what the human-in-the-loop is for.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. What I'd do differently
&lt;/h2&gt;

&lt;p&gt;Three things that I already know I got wrong and would fix on day one of a v2:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Escalate to a bigger model after N repair failures.&lt;/strong&gt; 3B is fast; 7B has 4× the reasoning depth. Cascade them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a validator of attribution.&lt;/strong&gt; Before generating tests, check that every method signature the LLM invents is in the APIDesigner's contract. Reject and re-ask if not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amend the annotation doctrine with three explicit fields&lt;/strong&gt; (&lt;code&gt;null_policy&lt;/code&gt;, &lt;code&gt;bound_inclusivity&lt;/code&gt;, &lt;code&gt;case_sensitive&lt;/code&gt;) instead of relying on three "conventions" in the prompt. Right conventions in the wrong place.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  8. The one thing I'm actually taking away from this
&lt;/h2&gt;

&lt;p&gt;Every tutorial I read before starting this project was about &lt;em&gt;how to prompt an LLM to write good code&lt;/em&gt;. None of them talked about &lt;em&gt;how to know if the code is good&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That's the whole game. &lt;strong&gt;The LLM is the cheap part.&lt;/strong&gt; The evaluator, the oracle, the human-in-the-loop, the annotation doctrine — that's where all the actual work lives.&lt;/p&gt;

&lt;p&gt;A 3B model with a well-designed loop beats a 70B model with none.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Meryeme Ramdi is a second-year AI engineering student at ENSIAS, currently interning on the Pulsar Modernizer project at Pulsaride Solutions. She writes about ML systems that ship, at &lt;a href="https://dev.to/meryyy"&gt;dev.to/meryyy&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>javasaas</category>
      <category>agents</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>How I Built an AI That Tells Doctors "Wait ...Are You Sure?"</title>
      <dc:creator>Meryeme ramdi</dc:creator>
      <pubDate>Tue, 07 Jul 2026 14:13:39 +0000</pubDate>
      <link>https://dev.to/meryyy/how-i-built-an-ai-that-tells-doctors-wait-are-you-sure-17jm</link>
      <guid>https://dev.to/meryyy/how-i-built-an-ai-that-tells-doctors-wait-are-you-sure-17jm</guid>
      <description>&lt;p&gt;How a student project turned into a lesson about humility, hard negatives, and why the best models know when to shut up.&lt;/p&gt;

&lt;h1&gt;
  
  
  The number that wouldn't leave me alone
&lt;/h1&gt;

&lt;p&gt;I remember the exact article that ruined my week.&lt;/p&gt;

&lt;p&gt;It was a study saying that diagnostic errors affect around 12 million adults in the US every year. Twelve million. That's roughly one in every twenty outpatient visits, and a decent chunk of them cause real harm.&lt;/p&gt;

&lt;p&gt;I read it, closed my laptop, and then reopened it ten minutes later because my brain was doing the thing it does the "but what if you could just…" thing.&lt;/p&gt;

&lt;p&gt;I'm a student. I'm not going to reform healthcare. But I do know how to train models. And the problem, when you squint at it, looks like a machine learning problem: given a set of symptoms and a proposed diagnosis, does this pairing actually make sense?&lt;/p&gt;

&lt;p&gt;So I started building. The project became my final-year adventure. I called it Misdiagnosis Detector, which is a slightly dramatic name for what it actually does: it's a second opinion. A tiny, opinionated little AI that reads a case and says one of three things:&lt;/p&gt;

&lt;p&gt;"Yeah, that fits." &lt;br&gt;
"Hmm, maybe double-check." &lt;br&gt;
"No, that doesn't add up." &lt;/p&gt;

&lt;p&gt;That third option ; the confident "no" , is the fun part. But getting there was a saga.&lt;/p&gt;

&lt;h1&gt;
  
  
  Attempt 1: The Naive Version (and why it embarrassed me)
&lt;/h1&gt;

&lt;p&gt;My first instinct was the same instinct every ML student has: throw a classifier at it.&lt;/p&gt;

&lt;p&gt;I scraped clinical cases from PubMed. I extracted symptoms and diagnoses. I trained a model to predict "diagnosis given symptoms." Classic supervised learning.&lt;/p&gt;

&lt;p&gt;It got ~90% accuracy on my test set.&lt;/p&gt;

&lt;p&gt;I was ecstatic for about six minutes, which is roughly how long it took me to realize the model was cheating. It had learned that "chest pain + shortness of breath" almost always co-occurs with "myocardial infarction" in the data because PubMed publishes the interesting cases where the diagnosis was, in fact, an MI. My model wasn't verifying anything. It was pattern-matching on publication bias.&lt;/p&gt;

&lt;p&gt;A doctor doesn't need an AI to tell them "chest pain probably means heart attack." A doctor needs an AI to tell them when the symptoms and the diagnosis they wrote down don't actually match.&lt;/p&gt;

&lt;p&gt;That's a different problem. And it required a completely different framing.&lt;/p&gt;

&lt;h1&gt;
  
  
  Attempt 2: Learning what "wrong" looks like
&lt;/h1&gt;

&lt;p&gt;The reframe: instead of predicting the diagnosis, I'd train a model to score coherence — how well any given symptom set matches any given diagnosis.&lt;/p&gt;

&lt;p&gt;For that, I needed pairs of symptoms and diagnoses that don't match. Not made-up gibberish — plausible-but-wrong pairings, the kind a tired resident at 3am might actually write down.&lt;/p&gt;

&lt;p&gt;This is where I met my new best friend: hard negatives.&lt;/p&gt;

&lt;p&gt;Instead of pairing "chest pain" with "sprained ankle" (too obvious, model learns nothing), I mined titles from PubMed to find diagnoses that sound like they could fit the symptoms but don't. Pneumonia paired with heart failure. Migraine paired with meningitis. Anxiety paired with hyperthyroidism. The lookalikes. The gotchas.&lt;/p&gt;

&lt;p&gt;The model that came out of this was more interesting, but the metric that mattered wasn't accuracy anymore , it was AUC, because I wanted a score, not a hard classification. I got to around 0.80 on my Phase 2 model.&lt;/p&gt;

&lt;p&gt;Not bad. Not good enough to put in front of anyone.&lt;/p&gt;

&lt;h1&gt;
  
  
  Attempt 3: Standing on the shoulders of giants (aka PubMedBERT)
&lt;/h1&gt;

&lt;p&gt;Here's the thing about building medical NLP as a student: you cannot possibly train a language model that understands medicine from scratch. Not with a laptop. Not with your university's GPU. Not in this lifetime.&lt;/p&gt;

&lt;p&gt;But you don't have to. Microsoft trained one for you. It's called PubMedBERT, and it has already read basically every biomedical paper on Earth.&lt;/p&gt;

&lt;p&gt;So I stopped trying to be clever with raw text. I ran everything — symptoms, diagnoses, case descriptions  through PubMedBERT to get embeddings. Then, on top of those frozen embeddings, I trained a small projection head with a contrastive objective: pull matching (symptoms, diagnosis) pairs close in vector space, push mismatches apart.&lt;/p&gt;

&lt;p&gt;Small model. Big shoulders. Suddenly my AUC jumped to ~0.92.&lt;/p&gt;

&lt;p&gt;I stared at the number for a while. It felt too good. I retrained it four times to make sure I hadn't leaked test data. I hadn't.&lt;/p&gt;

&lt;h1&gt;
  
  
  The part where I almost shipped a lie
&lt;/h1&gt;

&lt;p&gt;At 92% AUC, the temptation was to just… ship it. Slap a green/red output on it, call it a demo, put it on my CV.&lt;/p&gt;

&lt;p&gt;But here's the thing about medicine that I kept slamming into: a model that's confidently wrong 8% of the time is worse than no model at all. If a doctor trusts your green light and a patient dies, "well, my AUC was 0.92" is not a defense.&lt;/p&gt;

&lt;p&gt;So I did the least sexy but most important thing in the project: I made the model shut up when it wasn't sure.&lt;/p&gt;

&lt;p&gt;I built a three-zone decision system:&lt;/p&gt;

&lt;p&gt;Score below 0.15 → "This diagnosis doesn't fit the symptoms." (red)&lt;br&gt;
Score above 0.89 → "This checks out." (green)&lt;br&gt;
Everything in between → "I don't know. Verify manually." (yellow)&lt;/p&gt;

&lt;p&gt;The middle zone is the whole point. It's the model saying "I refuse to bet on this." Around 36% of cases fall into it, which sounds bad until you realize the model's accuracy on the cases it does commit to is 81%.&lt;/p&gt;

&lt;p&gt;I would rather build an AI that admits ignorance on a third of cases than one that fakes confidence on all of them. This is the lesson I want tattooed on every ML student's forehead: coverage is not the same as competence.&lt;/p&gt;

&lt;p&gt;Making it useful, not just correct&lt;/p&gt;

&lt;p&gt;A number on a screen isn't a product. So I built a Streamlit app around it, and added two things I'd want if I were the doctor using it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;A differential diagnosis. When the model rejects the proposed diagnosis, it doesn't just say "no" , it suggests the diagnoses that would fit the symptoms better, ranked by coherence score. Because "you're wrong" is unhelpful. "You're wrong, and here are three things it might actually be" is a second opinion.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Similar cases from PubMed. For every prediction, the app shows real published case reports with similar symptom profiles, retrieved via a semantic search over MiniLM embeddings. Because a doctor should never trust the AI blindly — they should trust the AI plus the evidence the AI is pointing at.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I also spent a stupid amount of time on vocabulary mapping. Doctors write "common cold." The model was trained on "URTI" (upper respiratory tract infection). Doctors write "heart attack." The training data says "STEMI" or "NSTEMI." I built a small clinical synonym mapper so the model doesn't get thrown by the fact that real people use real words.&lt;/p&gt;

&lt;p&gt;What I actually learned (the parts that don't fit on a CV)&lt;/p&gt;

&lt;p&gt;If you scroll to the top of my repo, you'll see a README with metrics and architecture diagrams. What you won't see is the stuff I actually take away from this project:&lt;/p&gt;

&lt;p&gt;Models that abstain are better than models that guess. The most valuable thing I built wasn't the classifier , it was the yellow zone. Knowing when not to answer is a feature, not a bug.&lt;/p&gt;

&lt;p&gt;Publication bias is a monster. Every dataset lies to you in some way. PubMed publishes the interesting cases; Reddit publishes the anxious ones; NEJM publishes the impossible ones. You have to know your data's personality before you can trust what your model learned from it.&lt;/p&gt;

&lt;p&gt;"92% AUC" is a beginning, not an ending. It's the moment you start asking harder questions: 92% on which subgroup? At what threshold? With what failure modes? A model that looks great in aggregate can be catastrophic in the tails.&lt;/p&gt;

&lt;p&gt;Frozen giants + a tiny learned head beats an ambitious student with a from-scratch model, every single time. Use PubMedBERT. Use SapBERT. Use whatever's out there. Your originality goes into the problem framing, not the architecture.&lt;/p&gt;

&lt;p&gt;Boring engineering matters. Half my final commits were about handling common cold vs URTI, calibrating thresholds, and making the Streamlit UI not look terrible. None of that goes on the model card. All of it decides whether the tool is usable.&lt;/p&gt;

&lt;p&gt;The version I actually want to build next&lt;/p&gt;

&lt;p&gt;If I keep going with this — and I probably will — the next version needs three things:&lt;/p&gt;

&lt;p&gt;Uncertainty that a doctor can act on. Right now the middle zone just says "verify." I want it to say why it's unsure. "The symptoms overlap with three other diagnoses" is more useful than "score = 0.42."&lt;/p&gt;

&lt;p&gt;More languages. All my training data is in English. Medicine happens everywhere. This is a fixable problem and a real one.&lt;/p&gt;

&lt;p&gt;A humbler evaluation. My 5-out-of-8 score on reference clinical cases is fine for a demo. It is not fine for anything real. I want to build a proper eval set with medical students grading outputs, and iterate against that.&lt;/p&gt;

&lt;p&gt;Why I wrote this down&lt;/p&gt;

&lt;p&gt;If you're a student staring at some overwhelming problem and thinking "I can't fix healthcare / climate / education / whatever" — you're right. You can't. Neither can I.&lt;/p&gt;

&lt;p&gt;But you can pick one small, well-defined corner of the problem and build a thing that would make one specific person's life 3% easier. That is enough. That is, honestly, more than enough.&lt;/p&gt;

&lt;p&gt;Twelve million diagnostic errors a year is not a number you fix with a Streamlit app. But it might be a number you chip at with tools that whisper "wait, are you sure?" at exactly the moment someone needed to hear it.&lt;/p&gt;

&lt;p&gt;I built one of those tools. It's imperfect and it's mine and I learned more from it than from any course I've ever taken.&lt;/p&gt;

&lt;p&gt;If you want to see it, the code is on GitHub and the live demo is on Hugging Face Spaces. If you want to build something similar and get stuck, my inbox is open.&lt;/p&gt;

&lt;p&gt;Now go find your twelve-million-shaped problem.&lt;/p&gt;

&lt;p&gt;Btw, this is my first time writing about my work publicly, but it definitely won't be the last. I built this project to learn, but I am always looking for the next thing to build.&lt;br&gt;
I’m an AI student seeking an internship for next year, and I am eager to collaborate on new projects and tackle completely different datasets. My inbox is open for new ideas, feedback, or internship opportunities. Drop me a line at &lt;a href="mailto:meryemeramdi05@gmail.com"&gt;meryemeramdi05@gmail.com&lt;/a&gt;, and let's connect on LinkedIn : &lt;a href="https://www.linkedin.com/in/meryeme-ramdi-5a879b388/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/meryeme-ramdi-5a879b388/&lt;/a&gt; &lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>nlp</category>
      <category>career</category>
    </item>
  </channel>
</rss>
